0

正しいダミーコードを含むように編集。~DSMで解決~

この問題は (私の頭の中では) 単純に思えます。別の辞書の k,v ペアに基づいて、1 つの辞書の値を「更新」する方法を見つけようとしています。

ダミーテキスト:

>>> dict1 = {'hello':'HELLO', 'bye':'BYE', 'right':'RIGHT', 'left':'LEFT'}
>>> dict2 = {'why':['hello', 'bye'], 'direction': ['left', 'right', 'right', 'right']}

希望する結果: -のキーが存在する場合dict2は、その値を含むように更新するだけです。dict1

updated_dict = {'why':['HELLO', 'BYE'], 'direction':['LEFT', 'RIGHT', 'RIGHT', 'RIGHT']}

私はこれをやろうとしています:

updated_dict = dict()
for v in dict2.values():
    id_list = dict2[v]
    for uniq_id in id_list: 
        new_id = dict1[uniq_id]
        if updated_dict.has_key(uniq_id):
            updated_dict[v].append(uniq_id)
        else:
            updated_dict[v] = list()
            updated_dict[v].append(uniq_id)

ハッシュ不可能なリストのため、これは機能しません。これは私を困惑させます、私はこの問題を回避する方法を考えることができません、何かアイデアはありますか?

注:これは単純な小文字 -> 大文字の問題ではありません。これは、問題の本質を捉えるために作成された単なるダミー テキストです。

4

2 に答える 2

4

勝手な推測: このようなことを考えていますか?

>>> dict1 = {'hello':'HELLO', 'bye':'BYE', 'right':'RIGHT', 'left':'LEFT'}
>>> dict2 = {'why': ['hello', 'bye'], 
    'direction': ['left', 'right', 'right', 'right'],
    'example': ["don't replace me", "right"]}
>>> new_d = {k: [dict1.get(x,x) for x in v] for k,v in dict2.items()}
>>> new_d
{'direction': ['LEFT', 'RIGHT', 'RIGHT', 'RIGHT'], 
'why': ['HELLO', 'BYE'], 
'example': ["don't replace me", 'RIGHT']}

デフォルト値を受け入れる辞書の方法を使用しgetて、置き換えられない値を変更せずに通過できるようにしました。

于 2013-04-22T22:56:35.993 に答える
3

最も単純ではないかもしれませんが、あなたの例ではうまくいきます:

>>> m={ x:",".join([dict1[y] for y in dict2[x].split(", ")]) for x in dict2}

また

>>> m={ k:",".join([dict1[y] for y in v.split(", ")]) for k,v in dict2.items()} 

結果は同じです:

>>> m
>>> {'direction': 'LEFT,RIGHT,RIGHT,RIGHT', 'why': 'HELLO,BYE'}
于 2013-04-22T23:01:31.940 に答える