我有一个字典列表,需要根据键的值从值的子字典中获取int_value。
my_list = [{'key': 'previous_id',
'value': {'int_value': '-4343583665607944462'}},
{'key': 'event_origin', 'value': {'string_value': 'auto'}},
{'key': 'screen_id', 'value': {'int_value': '-5880567181845583757'}},
{'key': 'previous_class', 'value': {'string_value': 'MainActivity'}},
{'key': 'screen', 'value': {'string_value': 'Gateway'}},
{'key': 'screen_class', 'value': {'string_value': 'Gateway'}}]
例如,我需要获取-4343583665607944462作为previous_id的字符串输出。
这是我到目前为止所看到的,对我来说看起来很复杂,想知道是否有更简单的方法来实现这一目标。
for d in my_list:
if list(d.values())[0] == 'previous_id':
print(list(d.values())[1].values())
获取-4343583665607944462作为previous_id的字符串输出。
请还建议定义一个函数是否有意义。
答案 0 :(得分:1)
我建议通过使用"previous_id"
而不是"key"
来检查第一个值是否为.values()[0]
,并获取值。如果您提前知道键,这是从字典访问数据的推荐方法。
如果您想简化代码,可以使用next
函数,该函数循环遍历可迭代对象并返回找到的第一个值(如果存在,则匹配给定条件)。
例如:
value = next(d["value"] for d in my_list if d["key"] == "previous_id")
这将返回
{'int_value': '-4343583665607944462'}
如果只需要"-4343583665607944462"
,则可以:
value = next(list(d["value"].values())[0] for d in my_list if d["key"] == "previous_id")
请注意,此处使用.values()[0]
是因为键并不总是相同。
如果next
到达可迭代对象的末尾但没有找到匹配项,也会引发StopIteration
异常,因此请考虑将其包装在try
/ except
块中。
答案 1 :(得分:1)
可能值得花些时间来处理字典的初始列表,例如:
key_to_int = {}
for d in my_list:
if 'int_value' in d['value']:
key_to_int[d['key']] = d['value']['int_value']
else:
key_to_int[d['key']] = None
然后您可以简单地做:
print(key_to_int['previous_id'])
print(key_to_int['event_origin'])
print(key_to_int['screen_id'])
哪个输出:
-4343583665607944462
None
-5880567181845583757
以上假设您的所有字典都采用相同的格式。如果某些词典的嵌套程度可能比其他词典高,则需要进行一些修改。
答案 2 :(得分:0)
我不知道您是否有权事先修改实际列表,但是将值的类型保留在单个字典中可能更有意义,例如:
my_list = [{
'key': 'previous_id',
'value': '-4343583665607944462',
'type': 'int_value' },...]
这样,您可以简单地致电:
for dict in my_list:
if dict['key']=='previous_id':
return dict['value']
或单线:
value = [x['values'] for x in my_list if x['key']=='previous_id']
如果您热衷于使用值类型
value = {x['type']:x['values'] for x in my_list if x['key']=='previous_id'}
答案 3 :(得分:0)
如果您想使用相同的词典并坚持使用您的方法,则可以使用:
for d in my_list:
if d["key"] == 'previous_id':
print(list(d["value"].values())[0])
但是建议您使用这样的字典:
my_dict = {"previous_id": '-4343583665607944462', 'event_origin':'auto',
'screen_id':-5880567181845583757, 'previous_class': 'MainActivity',
'screen': 'Gateway', 'screen_class': 'Gateway'}
然后您可以像这样简单地使用打印:
print(my_dict["previous_id"])