python - 我需要一个带有两个键的类似字典的结构,您可以在其中获取所有对象的列表,其中一个具有特定值
问题描述
假设我有一个看起来像这样的字典:
d['a']['1'] = 'foo'
d['a']['2'] = 'bar'
d['b']['1'] = 'baz'
d['b']['2'] = 'boo'
如果我想得到第一个键是'a'的每一个项目,我可以做到d['a']
,我会得到所有的。但是,如果我想获取第二个键为“1”的所有项目怎么办?我能想到的唯一方法是制作第二个字典,键的顺序相反,这需要复制内容。有没有办法在一个单一的结构中做到这一点?
编辑:忘了提:我想在不迭代所有内容的情况下做到这一点。我将要处理具有数十万个键的字典,所以我需要一些可扩展的东西。
解决方案
在此示例中,您正在处理三个字典:一个具有值“foo”和“bar”,一个具有值“baz”和“boo”,以及一个映射键“a”和“b”的外部字典到前两个内部词典。您可以使用嵌套的 for 循环遍历外部和内部字典的键:
items = []
for outer_key in d:
for inner_key in d[outer_key]:
if inner_key == "1":
items.append(d[outer_key][inner_key])
break # No need to keep checking keys once you've found a match
如果您不关心外部字典的键,您也可以使用d.values()
忽略键而只查看内部字典,然后对这些进行直接成员资格检查:
items = []
for inner_dict in d.values():
if "1" in inner_dict:
items.append(inner_dict["1"])
这也可以写成列表推导:
items = [inner_dict["1"] for inner_dict in d.values() if "1" in inner_dict]
推荐阅读
- python - python每周导入csv
- neo4j - Neo4j:查询以查找具有最多关系的节点
- javascript - 如何允许用户更改他们的游戏密钥?
- ios - SwiftUI:将视图与其父级的中心对齐
- python - 如何检查discord.py中是否已存在角色
- mysql - 通过google代理连接本地spring boot app到google cloud SQL
- macos - CGEventPost 无法在 Catalina (Mac OSX 10.15) 下将键盘事件传递给另一个进程
- blazor - Blazor 中的 InputNumber 绑定转换器
- wpf - 使用 wpf devexpress 在手风琴控制中更改 SVG 的颜色
- templates - 如果字段为空,如何显示文本?