4

辞書 (データ) のリストがあり、以下のように辞書 (x) に変換したいと考えています。次の「forループ」を使用して達成しています。

data = [{'Dept': '0123', 'Name': 'Tom'},
        {'Dept': '0123', 'Name': 'Cheryl'},
        {'Dept': '0123', 'Name': 'Raj'},
        {'Dept': '0999', 'Name': 'Tina'}]
x = {}

for i in data:
    if i['Dept'] in x:
        x[i['Dept']].append(i['Name'])
    else:
        x[i['Dept']] = [i['Name']]

Output:
x -> {'0999': ['Tina'], '0123': ['Tom', 'Cheryl', 'Raj']}

上記のロジックをdict内包表記またはその他のpythonicな方法で実装することは可能ですか?

4

2 に答える 2

10

口述理解は、不可能ではありませんが、最善の選択ではないかもしれません。defaultdict( https://docs.python.org/2/library/collections.html#collections.defaultdict )を使用することをお勧めします:

from collections import defaultdict
dic = defaultdict(list)
for i in data:
    dic[i['Dept']].append(i['Name'])
于 2015-04-16T16:08:27.867 に答える
5

少しでも重要なコードに含めるには複雑すぎるように思えますが、楽しみのために、以下をご覧ください。

{
    dept: [item['Name'] for item in data if item['Dept'] == dept]
    for dept in {item['Dept'] for item in data}
}
于 2015-04-16T16:06:20.960 に答える