[英]How to convert a list of lists to a dictionary with redundant keys?
我有一個列表列表,稱為my_list
:
['sit', (1, 1)]
['laboris', (2, 1)]
['nisi', (2, 1)]
['est', (4, 1)]
['qui', (4, 1)]
['cillum', (3, 1)]
['voluptate', (3, 1)]
['eu', (3, 1)]
['irure', (3, 1)]
['sunt', (4, 1)]
['reprehenderit', (3, 1)]
['nulla', (3, 1)]
['sint', (4, 1)]
['fugiat', (3, 1)]
['dolore', (2, 1)]
['dolore', (3, 1)]
['enim', (2, 1)]
['occaecat', (4, 1)]
['tempor', (2, 1)]
['commodo', (2, 1)]
['non', (4, 1)]
['minim', (2, 1)]
['aute', (3, 1)]
['ut', (2, 2)]
['ex', (2, 1)]
['deserunt', (4, 1)]
['ea', (2, 1)]
['eiusmod', (2, 1)]
['culpa', (4, 1)]
['labore', (2, 1)]
['mollit', (4, 1)]
['officia', (4, 1)]
['cupidatat', (4, 1)]
['adipiscing', (2, 1)]
['amet', (1, 1)]
['et', (2, 1)]
['ad', (2, 1)]
['consectetur', (2, 1)]
['anim', (4, 1)]
['magna', (2, 1)]
['quis', (2, 1)]
['ullamco', (2, 1)]
['dolor', (1, 1)]
['dolor', (3, 1)]
['aliquip', (2, 1)]
['velit', (3, 1)]
['ipsum', (1, 1)]
['incididunt', (2, 1)]
['sed', (2, 1)]
['id', (4, 1)]
['esse', (3, 1)]
['exercitation', (2, 1)]
['nostrud', (2, 1)]
我努力了:
d = {}
for item in all_lists:
d[item[0]] = item[1:]
print (d)
但這會覆蓋一個密鑰,而不是更新該值。 例如, dolor
變為: {'dolor': [(3,1)]
而不是預期的目標: {'dolor': (3,1), (1,1), etc...}
理想情況下,字典形狀將不包括元組列表作為值,但是如果需要的話。
如何將列表列表轉換為我想要的格式的字典?
我已經觀察到Python:字典的列表列表,但是這使我產生了現在不正確的信息。
使用defaultdict功能:
https://docs.python.org/2/library/collections.html#collections.defaultdict
未經測試的代碼!
d = defaultdict(list)
for item in all_lists:
d[item[0]].append(item[1:])
print (d)
您可以使用itertools.groupby
來對鍵進行排序(看起來像這樣):
import itertools as it
result = {k: [x[1] for x in v] for k, v in it.groupby(test, key=lambda x: x[0])}
一種方法是,如果d
缺少此鍵且值為空列表[]
,則添加新的鍵值對。 然后將新值附加到該列表。
Python具有setdefault
來做到這一點。
all_lists = [
['sit', (1, 1)],
['sit', (2, 2)],
['laboris', (2, 1)]
]
d = {}
for key, new_value in all_lists:
values = d.setdefault(key, [])
values.append(new_value)
print(d)
{
'sit': [(1, 1), (2, 2)],
'laboris': [(2, 1)]
}
這很煩人,但是您可以通過快速調用構造函數將list
更改為tuple
。
a = [
['sit', (1, 1)],
['laboris', (2, 1)],
['nisi', (2, 1)],
['est', (4, 1)],
['qui', (4, 1)],
['cillum', (3, 1)],
['voluptate', (3, 1)],
['eu', (3, 1)],
['irure', (3, 1)],
['sunt', (4, 1)],
['reprehenderit', (3, 1)],
['nulla', (3, 1)],
['sint', (4, 1)],
['fugiat', (3, 1)],
['dolore', (2, 1)],
['dolore', (3, 1)],
['enim', (2, 1)],
['occaecat', (4, 1)],
['tempor', (2, 1)],
['commodo', (2, 1)],
['non', (4, 1)],
['minim', (2, 1)],
['aute', (3, 1)],
['ut', (2, 2)],
['ex', (2, 1)],
['deserunt', (4, 1)],
['ea', (2, 1)],
['eiusmod', (2, 1)],
['culpa', (4, 1)],
['labore', (2, 1)],
['mollit', (4, 1)],
['officia', (4, 1)],
['cupidatat', (4, 1)],
['adipiscing', (2, 1)],
['amet', (1, 1)],
['et', (2, 1)],
['ad', (2, 1)],
['consectetur', (2, 1)],
['anim', (4, 1)],
['magna', (2, 1)],
['quis', (2, 1)],
['ullamco', (2, 1)],
['dolor', (1, 1)],
['dolor', (3, 1)],
['aliquip', (2, 1)],
['velit', (3, 1)],
['ipsum', (1, 1)],
['incididunt', (2, 1)],
['sed', (2, 1)],
['id', (4, 1)],
['esse', (3, 1)],
['exercitation', (2, 1)],
['nostrud', (2, 1)]
]
final = {}
for l in a:
final[l[0]]=tuple(l[1:])[0]
print(final)
版畫
{'sit': (1, 1), 'laboris': (2, 1), 'nisi': (2, 1), 'est': (4, 1), 'qui': (4, 1), 'cillum': (3, 1), 'voluptate': (3, 1), 'eu': (3, 1), 'irure': (3, 1), 'sunt': (4, 1), 'reprehenderit': (3, 1), 'nulla': (3, 1), 'sint': (4, 1), 'fugiat': (3, 1), 'dolore': (3, 1), 'enim': (2, 1), 'occaecat': (4, 1), 'tempor': (2, 1), 'commodo': (2, 1), 'non': (4, 1), 'minim': (2, 1), 'aute': (3, 1), 'ut': (2, 2), 'ex': (2, 1), 'deserunt': (4, 1), 'ea': (2, 1), 'eiusmod': (2, 1), 'culpa': (4, 1), 'labore': (2, 1), 'mollit': (4, 1), 'officia': (4, 1), 'cupidatat': (4, 1), 'adipiscing': (2, 1), 'amet': (1, 1), 'et': (2, 1), 'ad': (2, 1), 'consectetur': (2, 1), 'anim': (4, 1), 'magna': (2, 1), 'quis': (2, 1), 'ullamco': (2, 1), 'dolor': (3, 1), 'aliquip': (2, 1), 'velit': (3, 1), 'ipsum': (1, 1), 'incididunt': (2, 1), 'sed': (2, 1), 'id': (4, 1), 'esse': (3, 1), 'exercitation': (2, 1), 'nostrud': (2, 1)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.