簡體   English   中英

將具有列表值的 OrderedDict 擴展到字典列表

[英]Expand OrderedDict with list values to a list of dictionaries

我有一個帶有值列表的 OrderedDict:

OrderedDict([('key1', ['value1', 'value2']),
             ('key2',
              [[{'name': ['A', 'B'], 'amount': ['1', '2']}],
               [{'name': ['C', 'D'], 'amount': ['3', '4']}]])])

我想將其轉換為字典列表,其中內部字典值中的列表擴展到列表中的不同字典:

[{'key1': 'value1',
  'key2': [{'name': 'A', 'amount': 1}, {'name': 'B', 'amount': 2}]},
 {'key1': 'value2',
  'key2': [{'name': 'C', 'amount': 3}, {'name': 'D', 'amount': 4}]}]

我們可以使用zip一起遍歷“key1”和“key2”下的值,並在迭代時使用 append 遍歷 output 列表。 此外,內部字典的值也必須一起遍歷,因此我們解壓lst[0]的值並使用 zip 尚未構造內部字典:

out = []
for v, lst in zip(data['key1'], data['key2']):
    d = {'key1': v, 'key2': []}
    for tpl in zip(*lst[0].values()):
        mid = {key: val for key, val in zip(lst[0], tpl)}
        d['key2'].append(mid)
    out.append(d)

與嵌套理解相同的代碼:

out = [{'key1': v, 'key2': [{key: val for key, val in zip(lst[0], tpl)} for tpl in zip(*lst[0].values())]} for v, lst in zip(data['key1'], data['key2'])]

Output:

[{'key1': 'value1',
  'key2': [{'name': 'A', 'amount': '1'}, {'name': 'B', 'amount': '2'}]},
 {'key1': 'value2',
  'key2': [{'name': 'C', 'amount': '3'}, {'name': 'D', 'amount': '4'}]}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM