

Python初心者のため、おかしな点があるかも知れません。指摘していただけると幸いです。

[code]

    A(リスト) = ['さかな','とり','いぬ','ねこ','うさぎ']
    B(辞書) = {'さかな':'まぐろ','かつお','いぬ':'しばいぬ','ぽめらにあん'}
    
[/code]

(説明のために簡単なリストと辞書を書きましたが、本当はもっと多いです。)

上記のようなリストと辞書があったとして、Aの要素がBのキーに存在していた場合、キーとバリューを表示したいです。

結果が以下の様になると嬉しいです。

[code]

    'さかな':'まぐろ','かつお'
    'いぬ':'しばいぬ','ぽめらにあん'
    
[/code]


CC BY-SA 4.0
2022-12-14T06:24:40.713
92776
2022-12-15T15:03:59.527
2022-12-14T09:53:55.733
3060
55971
question
python
Python リストの要素と一致する辞書のキーとそのバリューを表示したい。


`B` は以下の様な値(キーが文字列で値がリスト)だとします。

[code]

    A = ['さかな','とり','いぬ','ねこ','うさぎ']
    B = {'さかな': ['まぐろ','かつお'], 'いぬ':['しばいぬ','ぽめらにあん']}
    
    matched = {a: B[a] for a in A if a in B}
    print(matched)
    
    # {'さかな': ['まぐろ', 'かつお'], 'いぬ': ['しばいぬ', 'ぽめらにあん']}
    
[/code]


CC BY-SA 4.0
2022-12-14T06:54:58.543
92779
2022-12-14T07:05:39.853
2022-12-14T07:05:39.853
47127
47127
92776
answer


解法例については既に回答されていますので，質問されている方が仰っている「おかしな点の指摘」を2点させていただきます。

(1) 辞書の記述

[code]

    B = {'さかな': 'まぐろ', 'かつお', 'いぬ': 'しばいぬ', 'ぽめらにあん'}
    
[/code]

「望む結果」からの推測ですが，辞書の別の表現形式（これは正しい記述）

[code]

    B['さかな'] = 'まぐろ', 'かつお'
    B['いぬ'] = 'しばいぬ', 'ぽめらにあん'
    
[/code]

を波括弧の表現形式に当て嵌めたのだと思われますが，これはエラーになります。回避するには丸括弧を使う必要があります。

[code]

    B = {'さかな': ('まぐろ', 'かつお'), 'いぬ': ('しばいぬ', 'ぽめらにあん')}
    
[/code]

(2) 「A の要素が B のキーに存在していた場合，キーとバリューを表示」  
おかしな点とまでは言えないのですが，表示する順序の指定があればより明確になります。選択肢としては「(a) A の順序 (b) B の順序（Python
3.7 以降可） (c) 不問」があり，それにより記述が変わってきます。普通に読めば (a) なので既に回答されている方は (a)
を選択しているようです。一方，(c) で良いのであれば積集合（共通集合）が使えますので御参考として記述例を示します。

[code]

    A = ['さかな', 'とり', 'いぬ', 'ねこ', 'うさぎ']
    B = {'さかな': ('まぐろ', 'かつお'), 'いぬ': ('しばいぬ', 'ぽめらにあん')}
    
    for k in set(A) & set(B.keys()):
        print(f"'{k}':", f"{B[k]}".strip('()'))
    
[/code]

[code]

    'いぬ': 'しばいぬ', 'ぽめらにあん'
    'さかな': 'まぐろ', 'かつお'
    
[/code]


CC BY-SA 4.0
2022-12-15T15:03:59.527
92807
2022-12-15T15:03:59.527
54588
92776
answer