在不知道键名的情况下从复杂的词典列表中删除键

时间:2020-05-19 08:09:26

标签: python-3.x dictionary

我在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'}]}}                       
]

我想删除所有键201920182017,而不知道这些键的名称。最终结果应如下所示:

[{'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。

2 个答案:

答案 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'}]}}                       
]
相关问题