Saya hanya menemukan pertanyaan di mana orang ingin menggabungkan kamus dengan kriteria "kunci", tetapi saya ingin menggabungkan kamus tergantung pada nilai yang sama (di mana saya tidak tahu persis nilainya).

Katakanlah saya memiliki Daftar yang berisi kamus

myList = [
  {'key1': 'v1', 'key2': 'v2'},
  {'key1': 'v1', 'key2': 'v3'},
  {'key1': 'v1', 'key2': 'v4'},
  {'key1': 'v5', 'key2': 'v6'},
  {'key1': 'v7', 'key2': 'v8'}
]

Sekarang saya ingin menggabungkan kamus di mana kunci memiliki nilai yang sama, misalnya, key1 memiliki nilai v1 tetapi saya tidak tahu apa itu 'v1' jadi saya tidak dapat menggunakan kriteria seperti =='v1'.

Sehingga menyebabkan

myMergedList = [
  {'key1': 'v1', 'key2': ('v2','v3','v4')},
  {'key1': 'v5', 'key2': 'v6'},
  {'key1': 'v7', 'key2': 'v8'}
]
0
matlabalt 12 Mei 2021, 13:29

1 menjawab

Jawaban Terbaik

Mencoba:

myList = [
    {"key1": "v1", "key2": "v2"},
    {"key1": "v1", "key2": "v3"},
    {"key1": "v1", "key2": "v4"},
    {"key1": "v5", "key2": "v6"},
    {"key1": "v7", "key2": "v8"},
]

out = {}
for d in myList:
    out.setdefault(d["key1"], []).append(d["key2"])

out = [
    {"key1": k, "key2": v[0] if len(v) == 1 else tuple(v)}
    for k, v in out.items()
]

print(out)

Cetakan:

[{'key1': 'v1', 'key2': ('v2', 'v3', 'v4')}, 
 {'key1': 'v5', 'key2': 'v6'}, 
 {'key1': 'v7', 'key2': 'v8'}]
1
Andrej Kesely 12 Mei 2021, 10:34