解包和测试嵌套字典值python

2024-09-28 01:27:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个由列表和嵌套字典组成的字典转换成一个更干净的字典列表,但是要测试其中一个嵌套值。你知道吗

基本上是这样的:

my_dict = {
    'N': [
        {'DATE': 2019, 'VALUE': 1}, 
        {'DATE': 2018, 'VALUE': 2}
    ], 
    'LT': [
        {'DATE': 2019, 'VALUE': 40}, 
        {'DATE': 2001, 'VALUE': 50}
    ]
}

对此:

my_dict_transformed = [
    {'DATE': 2019, 'N': 1, 'LT': 40}, 
    {'DATE': 2018, 'N': 2, 'LT': 'NULL'}, 
    {'DATE': 2001, 'N': 'NULL', 'LT': 50}
]

感谢所有提出的解决方案。我认为@Rakesh解决方案是最干净的。虽然有一个像@Anurag这样的默认函数,但对于稍微不同的数据结构可能非常有用。你知道吗


Tags: 函数lt数据结构列表date字典valuemy
3条回答

这是一种方法。你知道吗

例如:

my_dict = {
    'N': [
        {'DATE': 2019, 'VALUE': 1}, 
        {'DATE': 2018, 'VALUE': 2}
    ], 
    'LT': [
        {'DATE': 2019, 'VALUE': 40}, 
        {'DATE': 2001, 'VALUE': 50}
    ]
}

my_dict_transformed = {}
for k, v in my_dict.items():
    for i in v:
        if i["DATE"] not in my_dict_transformed:
            my_dict_transformed[i["DATE"]] = {'DATE': i["DATE"]}
            my_dict_transformed[i["DATE"]].update(dict((i,"NULL") for i in my_dict.keys()))
        my_dict_transformed[i["DATE"]][k] = i.pop('VALUE')
print(list(my_dict_transformed.values()))

输出:

[{'DATE': 2001, 'LT': 50},
 {'DATE': 2018, 'N': 2},
 {'DATE': 2019, 'LT': 40, 'N': 1}]
my_dict = {
    'N': [
        {'DATE': 2019, 'VALUE': 1}, 
        {'DATE': 2018, 'VALUE': 2}
    ], 
    'LT': [
        {'DATE': 2019, 'VALUE': 40}, 
        {'DATE': 2001, 'VALUE': 50}
    ]
}



res =[]

for i in my_dict['N']:
    dic = [i['DATE'],i['VALUE'],'NULL']
    res.append(dic)

for i in my_dict['LT']:
    flag = 0
    for j in res:
        if i['DATE'] == j[0] and flag ==0:
            flag = 1
            j[2]=i['VALUE']

    if flag==0:
        dic = [i['DATE'],'NULL',i['VALUE']]
        res.append(dic)
    flag = 0

sol = [{'DATE':i[0], 'N':i[1],'LT':i[2]} for i in res ]

print(sol)

输出

[{'DATE': 2019, 'N': 1, 'LT': 40}, {'DATE': 2018, 'N': 2, 'LT': 'NULL'}, {'DATE': 2001, 'N': 'NULL', 'LT': 50}]

使用itertools.groupby

my_dict = {
    'N': [
        {'DATE': 2019, 'VALUE': 1},
        {'DATE': 2018, 'VALUE': 2}
    ],
    'LT': [
        {'DATE': 2019, 'VALUE': 40},
        {'DATE': 2001, 'VALUE': 50}
    ]
}

from itertools import groupby

null_d = list({k: 'NULL' for k in my_dict}.items())
s = sorted(((k, i) for k, v in my_dict.items() for i in v), key=lambda k: k[1]['DATE'])
data = [dict([('DATE',v)] + null_d + [(v[0], v[1]['VALUE']) for v in g] ) for v, g in groupby(s, key=lambda k: k[1]['DATE'])]

from pprint import pprint
pprint(data)

印刷品:

[{'DATE': 2001, 'LT': 50, 'N': 'NULL'},
 {'DATE': 2018, 'LT': 'NULL', 'N': 2},
 {'DATE': 2019, 'LT': 40, 'N': 1}]

相关问题 更多 >

    热门问题