在字典中获取对应的值



在字典/列表中迭代的Python新手请耐心听我说:

字典列表:

l = 
[{'id': 1, 'name': 'cream'},
{'id': 2, 'name': 'sugar'},
{'id': 3, 'name': 'mint'}]

根据名称的值,我想从列表中选择相应的id值。

例如,如果我选择"cream",我想要1。"Sugar"我想要2,等等,等等

简单的方法做到这一点,最好是通过列表理解?

我可能没有完整的图片,但我在你的问题中看不到实际上需要字典列表。事实上,你所拥有的结构允许一个条目有多个id:

myList = [
{ 'id':   1, 'name': 'cream' },
{ 'id':   2, 'name': 'sugar' },   # duplicates
{ 'id': 999, 'name': 'sugar' },   #   here.
{ 'id':   3, 'name': 'mint'  }
]

如果你需要做的只是将字符串映射到一个标识符,一个单个字典就可以做到这一点:

lookup = {'cream': 1, 'sugar': 2, 'mint': 3}

那么你可以用lookup['cream']来做翻译。


如果您确实需要指定的特定数据结构,您可以使用以下命令:

[aDict['id'] for aDict in myList if aDict['name'] == 'cream']

获取匹配列表,如果有多个匹配列表,您需要决定如何处理,例如只获取第一个:

def getIdFor(haystack, needle):
matches = [aDict['id'] for aDict in haystack if aDict['name'] == needle]
if len(matches) == 0: return None
return matches[0]

如果我没理解错的话,你可能想这样做:

def selection(list_of_dicts, name_value):
for d in list_of_dicts:
if d["name"] == name_value:
return d["id"]
l = [{'id': 1, 'name': 'cream'},
{'id': 2, 'name': 'sugar'},
{'id': 3, 'name': 'mint'}]

input_name = input("name?")
result = [x["id"] for x in l if input_name == x["name"]]
print(result)

这将是相应的列表推导式。我不认为理解是最好的方法,因为你不想要一个列表,但你要求它。

列表推导似乎不是这样做的合适方式,但我已经创建了一些使用它的代码,因为这是您所要求的:

l = [{'id': 1, 'name': 'cream'},
{'id': 2, 'name': 'sugar'},
{'id': 3, 'name': 'mint'}]
def get_id(l, name):
new_list = [item for item in l if item['name'] == name]
if len(new_list) == 0:
return None
return new_list[0].get('id')
print(get_id(l, 'cream'))

输出
1

如果与查找操作相比,源数据修改很少,那么使用您正在寻找的精确映射生成一个新字典是有意义的,以避免在每次查找时进行完整扫描:

l = 
[{'id': 1, 'name': 'cream'},
{'id': 2, 'name': 'sugar'},
{'id': 3, 'name': 'mint'}]
remapped = {item['name']:item['id'] for item in l}
# then
remapped['cream'] # -> 1
remapped['suger'] # -> 2

相关内容

  • 没有找到相关文章

最新更新