2024-10-02 18:20:38 发布
网友
Python noob在字典/列表中进行迭代时遇到困难,请耐心听我说:
字典列表:
l = [{'id': 1, 'name': 'cream'}, {'id': 2, 'name': 'sugar'}, {'id': 3, 'name': 'mint'}]
根据名称的值,我想从列表中选择相应id的值
例如,如果我选择“奶油”,我想要1。“糖”我想要2个,等等
简单的方法,最好是通过列表理解
如果我理解正确,您可能想:
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)
这将是相应的列表理解。我不认为理解是最好的方法,因为你不想要一个列表,但你要求它
我可能没有完整的图片,但在你的问题中,我看不到任何需要词典列表的东西。事实上,您拥有的结构允许一个项具有多个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']来进行翻译
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]
如果我理解正确,您可能想:
这将是相应的列表理解。我不认为理解是最好的方法,因为你不想要一个列表,但你要求它
我可能没有完整的图片,但在你的问题中,我看不到任何需要词典列表的东西。事实上,您拥有的结构允许一个项具有多个ID:
如果您只需要将字符串映射到标识符,那么单个字典可以做到这一点:
然后您可以使用
lookup['cream']
来进行翻译如果您确实需要您指定的特定数据结构,您可以使用如下内容:
要获取匹配项列表,您需要决定如果存在多个匹配项,应执行哪些操作,例如仅获取第一个匹配项:
相关问题 更多 >
编程相关推荐