一个 dict 中的 key 包含 list, list 里边多个字典,用 2 个 for 怎么把 key 放到一个 list?

2020-08-24 22:01:56 +08:00
 css3
# 最终想要这个类型的数据 {"key": ["a", "b"]}
mylist= {"key": [{'a': '1'}, {'b': '2'}]}
all = {}
for k, v in mylist.items():
    for j in v:
        all.setdefault(j, []).append(j.keys())

# TypeError: unhashable type: 'dict' 怎么设置字典的 value 默认类型是 list,且可以 append? 
1821 次点击
所在节点    Python
9 条回复
JacHammer
2020-08-24 22:15:34 +08:00
```python
mylist= {"key": [{'a': '1'}, {'b': '2'}]}
all = {"key": []}
for k, v in mylist.items():
for j in v:
all['key'] += j.keys()
```
css3
2020-08-24 22:17:43 +08:00
@JacHammer 可是 mylist 里边有多个 key,我举例只写了一个
maddevil
2020-08-24 22:42:14 +08:00
```
mylist = {"key": [{'a': '1'}, {'b': '2'}]}
all = {}
for k, v in mylist.items():
all[k] = []
for j in v:
all[k] += j.keys()
```
Trim21
2020-08-24 22:47:01 +08:00
'dict' 怎么设置字典的 value 默认类型是 list,且可以 append?

from collections import defaultdict

d = defaultdict(list)
d[1].append(2)
print(d[1])
maddevil
2020-08-24 22:51:48 +08:00
其实还可以一行搞定:
{k: [j for i in v for j in i.keys()] for k, v in mylist.items()}
GoLand
2020-08-24 22:53:43 +08:00
In [30]: example = {'key': [{'a': '1'}, {'b': '2', 'c': '3'}], 'key2': [{'c': 1}, {'d': 2}]}

In [31]: res = {}

In [32]: for k, v in example.items():
...: res[k] = list(itertools.chain.from_iterable(map(lambda x: x.keys(), v)))
...:

In [33]: res
Out[33]: {'key': ['a', 'b', 'c'], 'key2': ['c', 'd']}
h272377502
2020-08-25 11:19:20 +08:00
楼主什么操作,j 的 type 是 dict,dict 是 unhashable 的对象,你的目的明明是以 k 作为 value 。。。
最后一行改成这样吧 all.setdefault(k, []).append(list(j.keys()))
css3
2020-08-25 22:36:15 +08:00
@css3 @JacHammer @maddevil @Trim21 @GoLand @h272377502
感谢各位老哥老姐,学习了👍
biglazycat
2020-09-06 21:27:57 +08:00
mylist= {"key": [{'a': '1'}, {'b': '2'}]}

all = {}

for k, v in mylist.items():
for j in v:
all.setdefault(k, []).append(list(j.keys())[0])

print(all)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/701085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX