[英]Split list of value into list of dictionary
我有這樣的鍵值字典:
[{"key1" : ['1', '2'], "key2" : ['john', 'marvel']}, {"key1" : ['150', '120'], "key2" : ['gandalf', 'sam']}]
我想得到這樣的東西:
[ {key1 : '1', key2 : 'john'}, {key1 : '2', key2 : 'marvel'}, {key1 : '150', key2 : 'gandalf'}, {key1 : '120', key2 : 'sam'}]
我被困在嵌入式循環中,但我不知道怎么做。
您可以使用列表推導 :
data = [{"key1": ['1', '2'], "key2": ['john', 'marvel']}, {"key1": ['150', '120'], "key2": ['gandalf', 'sam']}]
keys = ['key1', 'key2']
result = [dict(zip(keys, items)) for d in data for items in zip(*(d[k] for k in keys))]
print(result)
輸出量
[{'key2': 'john', 'key1': '1'}, {'key2': 'marvel', 'key1': '2'}, {'key2': 'gandalf', 'key1': '150'}, {'key2': 'sam', 'key1': '120'}]
上面的列表理解等效於以下for循環:
result = []
for d in data:
for items in zip(*(d[k] for k in keys)):
result.append(dict(zip(keys, items)))
如果從字面上總是只有"key1"
和"key2"
,則:
In [1]: data = [{"key1" : ['1', '2'], "key2" : ['john', 'marvel']}, {"key1" : ['
...: 150', '120'], "key2" : ['gandalf', 'sam']}]
...:
In [2]: [{"key1":v1, "key2":v2} for d in data for (v1, v2) in zip(d['key1'], d['key2'])]
Out[2]:
[{'key1': '1', 'key2': 'john'},
{'key1': '2', 'key2': 'marvel'},
{'key1': '150', 'key2': 'gandalf'},
{'key1': '120', 'key2': 'sam'}]
會做
更通用的方法是:
In [5]: [dict(zip(d, vs)) for d in data for vs in zip(*d.values())]
Out[5]:
[{'key1': '1', 'key2': 'john'},
{'key1': '2', 'key2': 'marvel'},
{'key1': '150', 'key2': 'gandalf'},
{'key1': '120', 'key2': 'sam'}]
result = [{}]
for item in data:
key, val = item.split(":", 1)
if key in result[-1]:
result.append({})
result[-1][key] = val
列表理解中有2個循環的最簡單方法
沒有硬編碼列表,沒有新變量
lst = [{"key1" : ['1', '2'], "key2" : ['john', 'marvel']}, {"key1" : ['150', '120'], "key2" : ['gandalf', 'sam']}]
[dict(zip(el.keys(), v)) for el in lst for k,v in el.items()]
[{'key1': '1', 'key2': '2'},
{'key1': 'john', 'key2': 'marvel'},
{'key1': '150', 'key2': '120'},
{'key1': 'gandalf', 'key2': 'sam'}]
list1 = [ {'key1' : '1', 'key2' : 'john'}, {'key1' : '2', 'key2' : 'marvel'}, {'key1' : '150', 'key2' : 'gandalf'}, {'key1' : '120', 'key2' : 'sam'}]
list2 = [{'key1':i['key1'][0], 'key2':i['key2'][0]} for i in list1] + [{'key1':i['key1'][1], 'key2':i['key2'][1]} for i in list1]
list2
[{'key1': '1', 'key2': 'john'},
{'key1': '150', 'key2': 'gandalf'},
{'key1': '2', 'key2': 'marvel'},
{'key1': '120', 'key2': 'sam'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.