我有两个名为a_list
和b_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_list
和b_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'}]
目标是能够同时访问page_max
和' category_id'对于相同的' category_name'。
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'
的值合并列表中的词典?
答案 0 :(得分:4)
您可以创建{category_name:dict}的中间字典,然后使用update:
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]
答案 1 :(得分:0)
如果保留列表的顺序很重要,可以使用有序字典作为中间结果。
请注意,如果let date = NSDate(timeIntervalSince1970: 1442351280)
和a_list
不完全重叠(一个包含在另一个中找不到的类别),此解决方案也有效。
b_list
答案 2 :(得分:0)
如果订单不重要,您可以使用:
首先将a_list
复制到c_list
:
import copy
c_list=copy.deepcopy(a_list)
for i in c_list:
for j in b_list:
if i['category_name'] == j['category_name']:
i['project_count'] = j['category_name']
print c_list
输出:
[{'project_count': u'AAA', 'category_id': 1, 'category_name': u'AAA'}, {'project_count': u'BBB', 'category_id': 2, 'category_name': u'BBB'}]