0

私はばかげたことをしていると確信していますが、辞書のリストを取得して、辞書のキーと値のペアの1つがキーになり、残りのキーと値のペアが一部になる辞書を作成しようとしています値が辞書のリストである値。例を次に示します。

In [115]: aa = ['a', 'b', 'c', 'd']

In [116]: my_dict = dict.fromkeys(key_list, [])

In [143]: my_dict
Out[143]: {'a': [], 'b': [], 'c': [], 'd': []}

In [117]: list_of_dicts = [{'letter':'a', 'val1':2, 'val2':3}, {'letter':'b', 'val1':4, 'val2':5}, {'letter':'c', 'val1':6, 'val2':7}]

In [118]: %paste
for entry in list_of_dicts:
    remainder = {k:v for k, v in entry.iteritems() if k!='letter'}
    my_dict[entry['letter']].append(remainder)

## -- End pasted text --

In [119]: my_dict
Out[119]: 
{'a': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
 'b': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
 'c': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
 'd': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}]}

私の値がディクショナリのすべてのエントリに適用されるのはなぜですか?

最終的な辞書ではない理由:

In [121]: final_dict
Out[121]: 
{'a': [{'val1': 2, 'val2': 3}],
 'b': [{'val1': 4, 'val2': 5}],
 'c': [{'val1': 6, 'val2': 7}]}
4

1 に答える 1

3

my_dict = dict.fromkeys(key_list, [])すべてのキーに同じリストを使用します

使用できます

my_dict = {k: [] for k in key_list}

各キーの新しいリストを取得する

または、使用できますcollections.defaultdict

my_dict = defaultdict(list)

list()新しいキーを挿入するたびに新しいリストを作成する呼び出し

于 2013-07-31T04:43:25.800 に答える