python生成一个调用名称的函数来获取id#
很抱歉,python新手,当我说getID('foo')时,它试图生成一个func,它将返回id# 这是我所拥有的,但它不能满足我的需求。任何帮助都很好,谢谢python生成一个调用名称的函数来获取id#,python,dictionary,Python,Dictionary,很抱歉,python新手,当我说getID('foo')时,它试图生成一个func,它将返回id# 这是我所拥有的,但它不能满足我的需求。任何帮助都很好,谢谢 def GetID(name): for v in info.values(): for k in v.keys(): if k == name: return(v[id]) else: return
def GetID(name):
for v in info.values():
for k in v.keys():
if k == name:
return(v[id])
else:
return "wrong name"
这就是为什么你不是在所有的钥匙上循环,而是只取你想要的一个
这就是为什么你不是在所有的钥匙上循环,而是只取你想要的一个
这就是为什么你不是在所有的钥匙上循环,而是只取你想要的一个
这就是为什么你不是在所有的钥匙上循环,而是只取你想要的一个
ie_info
与全局变量info
不匹配id
:v['id']
- 没有引号,
引用id
name
key,value。
- 只需使用
,dict['name']
dict['id']
ie_info
与全局变量info
不匹配id
:v['id']
- 没有引号,
引用id
name
key,value。
- 只需使用
,dict['name']
dict['id']
ie_info
与全局变量info
不匹配id
:v['id']
- 没有引号,
引用id
name
key,value。
- 只需使用
,dict['name']
dict['id']
ie_info
与全局变量info
不匹配id
:v['id']
- 没有引号,
引用id
name
key,value。
- 只需使用
,dict['name']
dict['id']
我会在一个生成你想要的东西的生成器上调用
next
;如果生成器耗尽而未产生结果,则可以指定“默认”值:
next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
Out[22]: 1
next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
Out[23]: 'wrong name'
(在这里使用Python3语法,使用
iteritems
而不是Python2中的items
)我会在生成所需内容的生成器上调用next
;如果生成器耗尽而未产生结果,则可以指定“默认”值:
next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
Out[22]: 1
next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
Out[23]: 'wrong name'
(在这里使用Python3语法,使用
iteritems
而不是Python2中的items
)我会在生成所需内容的生成器上调用next
;如果生成器耗尽而未产生结果,则可以指定“默认”值:
next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
Out[22]: 1
next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
Out[23]: 'wrong name'
(在这里使用Python3语法,使用
iteritems
而不是Python2中的items
)我会在生成所需内容的生成器上调用next
;如果生成器耗尽而未产生结果,则可以指定“默认”值:
next((i for i,d in info.items() if d['name'] == 'foo'), 'wrong name')
Out[22]: 1
next((i for i,d in info.items() if d['name'] == 'baz'), 'wrong name')
Out[23]: 'wrong name'
(在这里使用Python3语法,使用
iteritems
而不是Python2中的items
)使用正确的数据结构将使这变得更容易,并且假设您多次调用GetID
,也会更快。(通常,当您发现从数据中提取所需信息过于复杂时,答案通常是更改数据结构。)
如果您有一个将每个名称
映射到id
的字典,您可以这样做:
def GetID(name):
return name_to_id.get(name, "wrong name")
如果您以前从未见过d.get(key,default)
,则它相当于d[key]
,但如果该键不存在,您将获得default
,而不是引发KeyError
那么,你是如何建立这本词典的呢?好的,您已经知道如何显式地迭代现有词典,所以让我们这样做:
name_to_id = {}
for v in info.values():
name_to_id[v['name']] = v['id']
如果要使其更简洁,请执行以下操作:
name_to_id = {v['name']: v['id'] for v in info.values()}
无论哪种方式,您只需在字典上循环一次,设置name\u-to\u-id
映射,而不是每次需要查找名称时。这是一个更简单的循环
这意味着现在每个名称查找都非常简单,速度也非常快。使用正确的数据结构将使查找更加容易,并且,假设您多次调用
GetID
,也会更快。(通常,当您发现从数据中提取所需信息过于复杂时,答案通常是更改数据结构。)
如果您有一个将每个名称
映射到id
的字典,您可以这样做:
def GetID(name):
return name_to_id.get(name, "wrong name")
如果您以前从未见过d.get(key,default)
,则它相当于d[key]
,但如果该键不存在,您将获得default
,而不是引发KeyError
那么,你是如何建立这本词典的呢?好的,您已经知道如何显式地迭代现有词典,所以让我们这样做:
name_to_id = {}
for v in info.values():
name_to_id[v['name']] = v['id']
如果要使其更简洁,请执行以下操作:
name_to_id = {v['name']: v['id'] for v in info.values()}
无论哪种方式,您只需在字典上循环一次,设置name\u-to\u-id
映射,而不是每次需要查找名称时。这是一个更简单的循环
这意味着现在每个名称查找都非常简单,速度也非常快。使用正确的数据结构将使查找更加容易,并且,假设您多次调用
GetID
,也会更快。(通常,当您发现从数据中提取所需信息过于复杂时,答案通常是更改数据结构。)
如果您有一个将每个名称
映射到id
的字典,您可以这样做:
def GetID(name):
return name_to_id.get(name, "wrong name")
如果您以前从未见过d.get(key,default)
,它相当于d[key]
,除了