我在python中有这个复杂的字典列表。
[{'2019': {'LastDate': '2019-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2018': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2017': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}}
]
我想删除所有键2019
,2018
,2017
,而不知道这些键的名称。最终结果应如下所示:
[{'LastDate': '2019-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
]
当键的名称未知时,问题变得复杂。 我正在使用python 3.7。
答案 0 :(得分:3)
您必须遍历可用列表,并将密钥的值附加到另一个列表,然后另一个列表将是您的预期结果。
您可以创建一个这样的值列表:
original_list = [
{
"2019": {
"LastDate": "2019-12-31",
"Header": {
"HeaderStd": None,
"TimeType": {"#text": "Months", "@Code": "M"},
},
"Item": [
{"#text": "299021.000000", "@Code": "XXX"},
{"#text": "299021.000000", "@Code": "YYY"},
{"#text": "10.110920", "@Code": "ZZZ"},
],
}
},
]
result = [ ]
for element in original_list:
for value in element.values():
result.append(value)
print(result)
结果:
[
{
"LastDate": "2019-12-31",
"Header": {"HeaderStd": None, "TimeType": {"#text": "Months", "@Code": "M"}},
"Item": [
{"#text": "299021.000000", "@Code": "XXX"},
{"#text": "299021.000000", "@Code": "YYY"},
{"#text": "10.110920", "@Code": "ZZZ"},
],
}
]
答案 1 :(得分:3)
您将必须在*
上使用可迭代/元组拆包(d.values()
)才能获得所需的结果,因为d.values()
将产生一个dict_values
对象,其中包含嵌套词典,而不仅仅是词典本身。
l = [{'2019': {'LastDate': '2019-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2018': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2017': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}}
]
result = []
for d in l:
result.append(*d.values())
print(result)
输出:
[{'2019': {'LastDate': '2019-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2018': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}},
{'2017': {'LastDate': '2018-12-31',
'Header': {'HeaderStd': None,
'TimeType': {'#text': 'Months', '@Code': 'M'}},
'Item': [{'#text': '299021.000000', '@Code': 'XXX'},
{'#text': '299021.000000', '@Code': 'YYY'},
{'#text': '10.110920', '@Code': 'ZZZ'}]}}
]