我已經看到很多與我的問題相關的答案,但沒有一個能解決我的問題
這是輸入問題:
data = { "data": [{ key1:word},{ key1:hello},{key2:hey},{key2:hi}]}
預期輸出:
[{key1:word, key2:hey}, {key1:hello, key2:hi}]
如果我添加 key3 那么這是想要的輸出:
data = { "data": [{ key1:word},{ key1:hello},{key2:hey},{key2:hi},
{key3:somedata},{key3:somedata2}]}
# WANTED OUTPUT BELOW
[ {key1:word, key2:hey, key3:somedata}, {key1:hello, key2:hi,
key3:somedata2} ]
這是我嘗試過的:
for key,items in data.items():
if key == "key1":
do something
if key == "key2":
do something
但以上不能用于 1000 個密鑰對值,因此代碼應該是動態的。將來可以添加 key4、key5、key6....等,因此我無法在條件下定義每個關鍵專案。
uj5u.com熱心網友回復:
只要所有鍵的數量相同,我就找到了一個簡潔的解決方案!
from itertools import groupby
data = [{"key1": "value1"}, {"key1": "hello"}, {"key2": "value2"}, {"key2": "value3"}, {"key3": "test1"},
{"key3": "test2"}]
data.sort(key=lambda x: list(x.keys())[0]) # you need to sort for groupby to work in every case
grouped = [list(g) for k, g in groupby(data, key=lambda x: list(x.keys())[0])]
# = [[{'key1': 'value1'}, {'key1': 'hello'}], [{'key2': 'value2'}, {'key2': 'value3'}], [{'key3': 'test1'}, {'key3': 'test2'}]]
output = [{k:v for dic in t for k,v in dic.items()} for t in zip(*grouped)]
# source https://stackoverflow.com/a/43529214/10875953
print(output)
# prints [{'key1': 'value1', 'key2': 'value2', 'key3': 'test1'}, {'key1': 'hello', 'key2': 'value3', 'key3': 'test2'}]
uj5u.com熱心網友回復:
有趣的請求.....我想這可能是你需要的?
data = [{ "key1":"value1"},{ "key1":"hello"},{"key2":"value2"},{"key2":"value3"}]
odd_entries = data[::2] # Iterate by twos, starting at 0
even_entries = data[1::2] # Iterate by twos, starting at 1
print(list(zip(odd_entries, even_entries)))
[({'key1': 'value1'}, {'key1': 'hello'}), ({'key2': 'value2'}, {'key2': 'value3'})]
uj5u.com熱心網友回復:
希望這將幫助您理解問題
data = { "data": [{"key1":"word"},{ "key1":"hello"},{"key2":"hey"},{"key2":"hi"},
{"key3":"somedata"},{"key3":"somedata2"}]}
dic1 = {}
dic2 = {}
[dic2.update(dic) if tuple(dic)[0] in dic1.keys() else dic1.update(dic) for dic in data["data"]]
上面的串列理解可以重寫為打擊(為了更好地理解)
for dic in data["data"]:
if tuple(dic)[0] in dic1.keys():
dic2.update(dic)
else:
dic1.update(dic)
輸出:
dic1
{'key1': 'word', 'key2': 'hey', 'key3': 'somedata'}
dic2
{'key1': 'hello', 'key2': 'hi', 'key3': 'somedata2'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408920.html
標籤:
