python - 合并两个在字典中具有相同项目的列表

标签 python

我有两个名为 a_listb_list 的列表:

a_list = [{'category_id': 1, 'category_name': u'AAA'}, \
    { 'category_id': 2, 'category_name': u'BBB'}]

b_list = [{'project_count': u'20', 'category_name': u'AAA'}, \
    {'project_count': u'31', 'category_name': u'BBB'}]

我想制作一个新列表,c_list,它结合了 a_listb_list 以及 category_name。结果列表应如下所示:

c_list = [{'category_id': 1,'project_count': u'20', 'category_name': u'AAA'},\
    {'category_id': 2,'project_count': u'31', 'category_name': u'BBB'}]

目标是能够访问同一“category_name”的 page_max 和“category_id”。

for entry in c_list:
    page_num =1
    category_name   =  entry['category_name']
    category_id     =  entry['category_id']
    url = 'https://www.test.com?category_id=%(category_id)s&page=%(page)s' % {'category_id': category_id, 'page': str(page_num)}
    print url

    # AAA project_count is 20 
    # BBB project_count is 31
    page_max = int(entry['project_count'])
    for i in range(page_max - 1):
        page_num += 1
        url = 'https://www.test.com?category_id=%(category_id)s&page=%(page)s' % {'category_id': category_id, 'page': str(page_num)}
        print url

如何根据键 'category_name' 的值合并列表中的字典?

最佳答案

您可以创建一个 {category_name: dict} 的中间字典,然后使用更新:

temp = {a['category_name']: dict(a) for a in a_list}
for b in b_list:
    temp[b['category_name']].update(b)
c_list = list(temp.values())    # list() unnecessary in py2.X

但这并不能保证保持列表的顺序。如果顺序很重要:

c_list = [temp[a['category_name']] for a in a_list]

关于python - 合并两个在字典中具有相同项目的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32687664/

相关文章:

python - Flask SecureCookie用json替换pickle导致编码错误

Python - 连接到 AWS Neptune

python - 在 Keras 中定义模型

python - Tensorflow:ValueError:应定义 `Dense` 输入的最后一个维度。发现 `None`

python - 在新的多索引级别下连接 Pandas 列

python - 从 python 解释器恢复 .pyc 文件

python - 按字符串列的长度对数据框进行排序

python - 重采样错误 : ValueError: month must be in 1. .12

python - 基于列表复制 pandas 数据框中的行并用列表条目填充新列

python - 如何使 flask 神社使用python列表中的变量作为神社表达式变量