python - 比较python中的两个字典列表

标签 python list dictionary

我有两个名为 category 和 sub_category 的字典列表。

category = [{'cat_id':1,'total':300,'from':250},{'cat_id':2,'total':100,'from':150}]
sub_category = [{'id':1,'cat_id':1,'charge':30},{'id':2,'cat_id':1,'charge':20},{'id':3,'cat_id':2,'charge':30}]

我想更改 charge 的值至 0在子类别中,如果 total >= from 的值在 category其中 cat_id是相等的。

预期结果是:

sub_category = [{'id':1,'cat_id':1,'charge':0},{'id':2,'cat_id':1,'charge':0},{'id':3,'cat_id':2,'charge':30}]

我设法通过使用这个得到了结果

for sub in sub_category:
    for cat in category:
        if cat['cat_id'] == sub['cat_id']:
            if cat['total'] >= cat['from']:
                sub['charge']=0

但我想知道更好的方法。任何帮助将不胜感激。

最佳答案

这是一种方法。将类别更改为字典以便于循环。

例如:

category = [{'cat_id':1,'total':300,'from':250},{'cat_id':2,'total':100,'from':150}]
sub_category = [{'id':1,'cat_id':1,'charge':30},{'id':2,'cat_id':1,'charge':20},{'id':3,'cat_id':2,'charge':30}]

category = {i.pop('cat_id'): i for i in category}

for i in sub_category:
    if i['cat_id'] in category:
        if category[i['cat_id']]['total'] >= category[i['cat_id']]['from']:
            i['charge'] = 0
print(sub_category)  

输出:

[{'cat_id': 1, 'charge': 0, 'id': 1},
 {'cat_id': 1, 'charge': 0, 'id': 2},
 {'cat_id': 2, 'charge': 30, 'id': 3}]

关于python - 比较python中的两个字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58688762/

相关文章:

Python格式化Ctime方法

java - 按属性对对象列表进行分组

python - 如何检查字典中的列表是否是键?

java - 在 postman 帖子请求中发送 map

python - 使 pip install .[option] 安装比默认 pip install 更少的软件包。 (所谓的负额外要求)

python - 我的语法或解析器生成工具是否存在错误?

python selenium - 如何使 webdriver 使用 XPATH 2.0 版

list - 从字符串列表 a 中导出类型 A

python - 如果特定键与查询匹配,如何获取所有键/值?

c# - 存储通用对象的列表/字典