我正在尝试通过字典的第二级简化迭代。
我知道这适用于简单列表:
if new not in existing_list:
dosomestuff
是否有机会为字典y
执行类似的操作,其中每个条目都是这样的?
{'fields':
{'ID': 123, 'name': 'test'},
'otherfield': 'value'
}
我需要做的是将变量(我们称之为x
)与每个y['fields']['ID']
进行比较。目前我只是在迭代y
,但我认为必须有一种更聪明的方法来找到匹配。
答案 0 :(得分:1)
为什么不创建以ID作为密钥的字典?
d = {143:
{‘name‘: ‘test'},
545:
{'name': 'another test'},
}
答案 1 :(得分:1)
你可以像列表那样创建你正在做的幻觉,但你必须遍历dict值。这是一种方法。
mydict = {'fields': {'id': 123, 'name': 'value'}, 'fields2': 'test'}
test_id = 123
if test_id in (level2['id'] for level2 in mydict.values()):
print("success: value found")
else:
print("The value does not exist")
# Output: success: value found
答案 2 :(得分:1)
要在1行中检测给定的inner_key是否有inner_value,请尝试:
my_dict= {'fields': {'ID': 123, 'name': 'test'},
'otherfield': 'value'}
inner_key, inner_value = 'ID', 123
print(inner_value in [val.get(inner_key) for val in my_dict.values() if isinstance(val, dict)])
# True
请注意,如果inner_key不在内部字典中,则get()
方法将使您免于崩溃;如果my_dict中不仅有isinstance()
函数,则>>> t = symbols('t', positive=True)
>>> s = symbols('s')
>>> inverse_laplace_transform(1 - 9/(s + 2) + 5/(s+1) - 1/(s+1)**2, s, t)
函数。值()。
答案 3 :(得分:0)
我正在考虑使用列表理解来浏览字典并构建要查找的每个相关字段的列表,例如['fields']['ID']
,然后使用您已经提到的if x in list
。这很简单,易于阅读,可以通过最少的修改进行调整以涵盖不同的领域。
>>> MyDict = {}
>>> MyDict["entry1"] = {'fields':{'ID': 123, 'name': 'test'},'otherfield': 'value' }
>>> MyDict["entry2"] = {'fields':{'ID': 456, 'name': 'test2'},'otherfield': 'value2' }
>>> x = 123
>>> if x in [v['fields']['ID'] for v in MyDict.values()]:
... print("found x")
...
found x
>>> x = 789
>>> if x in [v['fields']['ID'] for v in MyDict.values()]:
... print("found x")
...
>>>
答案 4 :(得分:0)
'ID'
是一个列表吗?怎么样:
dictionary = {'fields':
{'ID': [123,456], 'name': 'test'},
'otherfield': 'value'}
item = 789
if item != dictionary['fields']['ID']:
print('Hurra!')
或者对不同的数据类型使用另一种比较方法。
如果你不知道你需要哪个第一级字段:
if item not in (dictionary[field]['ID'] for field in dictionary.keys()):
print('Hurra!')
答案 5 :(得分:0)
其他人提供了一些不错的选择,所以我想我会列出一些你可能选择使用的不同的东西:
(重用用户的例子)
>>> MyDict = {}
>>> MyDict["entry1"] = {'fields':{'ID': 123, 'name': 'test'},'otherfield': 'value' }
>>> MyDict["entry2"] = {'fields':{'ID': 456, 'name': 'test2'},'otherfield': 'value2' }
>>> for v in map(lambda x: x['ID'],
filter(lambda x: isinstance(x, dict) and 'ID' in x,
sum(map(lambda x:list(x.values()),
list(MyDict.values())),
[]))):
... v
...
123
456
为了解释这一点,从最里面的函数向外移动: