Python 从dict列表中查找具有用户输入密钥的dict

Python 从dict列表中查找具有用户输入密钥的dict,python,json,Python,Json,python 3.5 嗨,我有一个简单的json.json文件: json {"x": [ {"A": "B"}, {"C": "D"}, {"E": "F"} ]} data = json.load(open('json.json')) R = 'C' #user input print(data['x'][1][R]) 我有这个代码来查找A或C或E后面的字母 python {"x": [ {"A": "B"}, {"C": "D"}, {"

python 3.5

嗨,我有一个简单的json.json文件:

json

{"x": [
    {"A": "B"},
    {"C": "D"},
    {"E": "F"}
]}
data = json.load(open('json.json'))
R = 'C' #user input
print(data['x'][1][R])
我有这个代码来查找A或C或E后面的字母

python

{"x": [
    {"A": "B"},
    {"C": "D"},
    {"E": "F"}
]}
data = json.load(open('json.json'))
R = 'C' #user input
print(data['x'][1][R])

如何在不知道并硬编码dict索引的情况下找到具有键的dict?

因此,如果要通过搜索而不硬编码索引来查找值,则需要一个循环来检查每个dict的键:

data = json.load(open('json.json'))
R = 'C' #user input
for d in  data['x']:
    if R in d:
        print(d[R])
        break # if there can be more that one match then remove

正如Padraic Cunningham所指出的,您需要循环查看您的结果。您的解决方案如下所示:

data = json.load(open('json.json'))
R = 'C' #user input
print([x for x in data['x'] if x.keys()[0] == R][0][R])

[x代表数据中的x['x']如果x.keys()[0]==R]
在列表中为您提供带有键R的所有dict。假设没有重复的键,选择第一个元素并访问其值。

第二个元素中没有“A”键,因此逻辑上不会有命中。你想干什么?您是否尝试使用
R
中的键搜索集合?您是否能够修复生成JSON的进程,使其采用更合理的格式,例如:
{“x”:{“a”:“B”,“C”:“D”,“E”:“F”}
?python使用基于零的索引,而不是基于零的索引。因此,
data['x'][1]
是第二个错误sorry@Phylogenesis我有另一个代码使用这种类型的json代码,我想编辑它们,我必须重写所有的东西。不用担心,我编辑了你的问题,以符合你实际提出的问题。