从Python 3.3.4列表中获取具有最高整数的变量的名称
最近尝试了类似于 (当然是Python的形式)但是,当返回值时,我得到的是变量的值,而不是变量的名称 我的数组如下所示:从Python 3.3.4列表中获取具有最高整数的变量的名称,python,list,Python,List,最近尝试了类似于 (当然是Python的形式)但是,当返回值时,我得到的是变量的值,而不是变量的名称 我的数组如下所示: x = 1 y = 2 z = 3 alloutputs = [x, y, z] >>> d = {'x': 1, 'y': 2, 'z': 3} >>> max(d, key=d.get) 'z' 在需要帮助之前,最远、最丑陋的是: alloutputs[alloutputs.index(max(alloutputs))] 但
x = 1
y = 2
z = 3
alloutputs = [x, y, z]
>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> max(d, key=d.get)
'z'
在需要帮助之前,最远、最丑陋的是:
alloutputs[alloutputs.index(max(alloutputs))]
但是它仍然给我一个最大值的整数!根据最大的变量,如何取回x、y或z的名称?列表不会保存变量的名称。使用字典或:
正如@zhangxaochen所说,您需要使用字典或命名元组。您可以使用这样的词典:
x = 1
y = 2
z = 3
alloutputs = [x, y, z]
>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> max(d, key=d.get)
'z'
您可以使用字典:
alloutputs = {'x':1,'y':2,'z':3}
maxvalue = max(alloutputs.values())
print [k for k, v in alloutputs.iteritems() if v == maxvalue]
然而,如果你真的必须这样做,你可能需要重新考虑你的设计,IMHO。免责声明:这太糟糕了,你不应该这样做
[var for var in dir() if eval(var) == max(all)][0]
它可以满足您的需要,但正如其他人所说,您最好使用字典。为什么需要变量名而不是值?可能还有更好的选择,例如,将这些变量转换为字典条目;它们在算法之外没有任何意义,并且用于它们的符号是任意的。你的意思是
max(d,key=d.get)
谢谢你给我关于词典的建议,这对我的需要来说还是很快的,效果很好。谢谢。sorted(…)[-1]
是拼写max(…)
的一种愚蠢的方式。在字典上循环就像用一个加载的Uzi棍棒打死一个人。使用max
的key
参数,例如max(alloutput,key=alloutput.get)
或类似的东西。当你使用一个合适的、单独的字典代替locals()
@delnan时,它就变成了完美的设计。你的意思是,根据变量的名称,它被认为是一个好的设计?一点也不好。我说的不是变量名,只是一个字典键(很可能不是硬编码的,而是来自动态数据源)。@delnan但OP试图获取变量名,该变量名具有最大值。这就是为什么我希望他重新考虑这个设计。我同意,我已经在对这个问题的评论中告诉了OP同样的事情。