首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含字典列表的字典

包含字典列表的字典
EN

Stack Overflow用户
提问于 2018-08-04 01:28:51
回答 4查看 242关注 0票数 4

新手在这里,所以很抱歉重复/愚蠢的问题,但我找不到答案。

我正试着把(字典)列表的内容存入一本新字典。

代码语言:javascript
运行
复制
a={}
b=[]
c={"Name":"Claude","Surname":"Verde","Age":"35","City":"Paris"}
b.append(c)
c={"Name":"Jean","Surname":"Claude","Age":"22","City":"Paris"}
b.append(c)
c={"Name":"Sam","Surname":"Smith","Age":"42","City":"London"}
b.append(c)
c={"Name":"James","Surname":"Jones","Age":"44","City":"London"}
b.append(c)
for i in range(len(b)):
    if b[i]['City'] == 'Paris':
        a["Paris"]=([b[i]])
    elif b[i]['City'] == 'London':
        a["London"]=([b[i]])
a

结果:

代码语言:javascript
运行
复制
{'Paris': [{'Name': 'Jean',
   'Surname': 'Claude',
   'Age': '22',
   'City': 'Paris'}],
 'London': [{'Name': 'James',
   'Surname': 'Jones',
   'Age': '44',
   'City': 'London'}]}

但是,我想要一本包含一个城市所有居民的字典。

上面的代码只存储驻留在列表中的第二个,而不是第一个。

例如,希望得到下面的输出。

我如何才能做到这一点?

非常感谢您的帮助。谢谢

代码语言:javascript
运行
复制
{'Paris': [{'Name': 'Claude',
   'Surname': 'Verde',
   'Age': '35',
   'City': 'Paris'},{'Name': 'Jean',
   'Surname': 'Claude',
   'Age': '22',
   'City': 'Paris'}],
 'London': [{'Name': 'Sam',
   'Surname': 'Smith,
   'Age': '42',
   'City': 'London'},{'Name': 'James',
   'Surname': 'Jones',
   'Age': '44',
   'City': 'London'}]}
EN

回答 4

Stack Overflow用户

发布于 2018-08-04 01:32:03

在初始化a时,我会这样处理它:

代码语言:javascript
运行
复制
a = {}

b=[]
c={"Name":"Claude","Surname":"Verde","Age":"35","City":"Paris"}
b.append(c)
c={"Name":"Jean","Surname":"Claude","Age":"22","City":"Paris"}
b.append(c)
c={"Name":"Sam","Surname":"Smith","Age":"42","City":"London"}
b.append(c)
c={"Name":"James","Surname":"Jones","Age":"44","City":"London"}
b.append(c)

for i in range(len(b)):
    if b[i]['City'] not in a.keys():
        a[b[i]['City']] = []

for i in range(len(b)):
    a[b[i]['City']].append(b[i]])

注意:我非常确定你可以像这样组合这些for循环:

代码语言:javascript
运行
复制
for i in range(len(b)):
    if b[i]['City'] not in a.keys():
        a[b[i]['City']] = []
    a[b[i]['City']].append(b[i]])
票数 2
EN

Stack Overflow用户

发布于 2018-08-04 01:37:11

使用itertools.groupby

代码语言:javascript
运行
复制
>>> lst = [
... {"Name":"Claude","Surname":"Verde","Age":"35","City":"Paris"},
... {"Name":"Jean","Surname":"Claude","Age":"22","City":"Paris"},
... {"Name":"Sam","Surname":"Smith","Age":"42","City":"London"},
... {"Name":"James","Surname":"Jones","Age":"44","City":"London"}]
>>>
>>> from itertools import groupby
>>> f = lambda d: d['City']
>>> res = {k:list(v) for k,v in groupby(sorted(lst, key=f), f)}
>>> pprint(res)
{'London': [{'Age': '42', 'City': 'London', 'Name': 'Sam', 'Surname': 'Smith'},
            {'Age': '44', 'City': 'London', 'Name': 'James', 'Surname': 'Jones'}],
 'Paris': [{'Age': '35', 'City': 'Paris', 'Name': 'Claude', 'Surname': 'Verde'},
           {'Age': '22', 'City': 'Paris', 'Name': 'Jean', 'Surname': 'Claude'}]}
票数 0
EN

Stack Overflow用户

发布于 2018-08-04 01:37:45

使用itertools.groupby

代码语言:javascript
运行
复制
from itertools import groupby

b = [{'Name': 'Claude', 'Surname': 'Verde', 'Age': '35', 'City': 'Paris'}, 
     {'Name': 'Jean', 'Surname': 'Claude', 'Age': '22', 'City': 'Paris'}, 
     {'Name': 'Sam', 'Surname': 'Smith', 'Age': '42', 'City': 'London'}, 
     {'Name': 'James', 'Surname': 'Jones', 'Age': '44', 'City': 'London'}]

print({k: list(g) for k, g in groupby(b, key=lambda x: x['City'])})

# {'Paris': [{'Name': 'Claude', 'Surname': 'Verde', 'Age': '35', 'City': 'Paris'}, {'Name': 'Jean', 'Surname': 'Claude', 'Age': '22', 'City': 'Paris'}], 
#  'London': [{'Name': 'Sam', 'Surname': 'Smith', 'Age': '42', 'City': 'London'}, {'Name': 'James', 'Surname': 'Jones', 'Age': '44', 'City': 'London'}]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51677489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档