【问题标题】:How to run many keys through a Python function如何通过 Python 函数运行多个键
【发布时间】:2019-03-18 15:48:30
【问题描述】:

我有一个这样的 Python 字典 mydict = {}

{5200:{'C1': 0.2, 'C2': 0.8, 'C3': 0.3}, 
 5201: {'C1': 0.0, 'C2': 0.8, 'C3': 0.2},
 5202: {'C1': 0.0, 'C2': 0.8, 'C3': 0.2},
...} 

然后我创建一个函数,为我插入的每个键提供一个结果。

def myfunction() 

为了得到我的结果,我写了

myfunction(mydict, 5200)

是否可以将我所有的键 [5200, 5201, 5202,..] 插入到该函数中,以便获得结果列表?

【问题讨论】:

    标签: python function loops dictionary


    【解决方案1】:

    是的,您可以为此使用 列表理解

    [ myfunction(mydict, key) for key in mydict ]
    

    或者你可以使用map(..):

    from functools import partial
    
    list(map(partial(myfunction, mydict), mydict))
    

    但是请注意,字典是无序的(直到),因此可以按每个可能的顺序枚举键。这不是因为我们在这里迭代它的方式:当您将键值对存储在字典中时,该顺序在字典中“丢失”了。

    【讨论】:

    • Re: 无序字典,它们在 Python 3.6+ 中被 insertion 排序,作为 3.6 中的实现细节,在 3.7 中可以依赖。
    • @jpp:是的,我知道,尽管我个人认为这仍然不是很有用:通过键值对传递链表会使数据结构理论上更大。更现代的语言使此功能更加可选。
    【解决方案2】:

    您应该使用 set 来存储输出,因为字典键没有排序:

    {myfunction(mydict, k) for k in in mydict}
    

    请注意,使用集合要求 myfunction 的所有输出都是可散列的

    或者,如果您想对键进行排序,以便输出是排序键的结果列表(即52005201 等):

    [myfunction(mydict, k) for k in sorted(list(mydict.keys()))]
    

    【讨论】:

    • 如果myfunc 产生的结果不可散列怎么办?
    • Re: 字典键没有被排序,它们在 Python 3.6+ 中是 insertion 排序的,作为 3.6 中的实现细节,在 3.7 中可以依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多