列表理解,从字典列表向函数传递2个值

2024-09-21 00:44:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据结构:

my_list = [0] {key1: [1, 2, 3]
               key2: [4, 5, 6]
               key3: .....
               key4: .....}

          [1] {key1: [.......]
               key2: [... etc.

也就是说,4个字典的列表,每个字典有4个键,每个键有3个值的列表。很好很一致。在

我想遍历每个列表中的每个值,并用一个外部函数更新它。这个外部函数接受2个参数(我正在更新的值和包含在其各自键中的浮点值)。这是一个基本的数学问题,但问题是在迭代文件,因为它变得越来越复杂,我迷路了。在

到目前为止我所做的:

^{pr2}$

代码不起作用,其他人可能很清楚原因。在

外部功能:

def external~_function(key, value):
    E = ((value - key)/key)**2
    return E

错误,TypeError: unsupported operand type(s) for -: 'list' and 'float'

所以主迭代行传递的是一个列表,而不是它看起来的每个元素。在


Tags: key函数数据结构列表字典valuemyetc
3条回答

在for循环中,只使用一个键创建dict,而循环键只用于列表理解-

[external_function(float(key), value) for key, value in my_list[i].iteritems()]

事实上,这种情况不会发生。另外,如果我没说错,value是一个列表,因此您将整个列表作为参数传递给外部函数,这可能不是您想要的。在

一个简单的方法是(对于python2.7+和字典理解)—

^{pr2}$

只有一句话是-

def Efunction_conversion(my_list):
    return [{key:[external_function(float(key),y) for y in value] for key, value in x.iteritems()} for x in my_list]

如果你在写/理解列表/听写理解上有困难,在写一行之前先把它缩进:

my_list = [
    {'key1': [1, 2, 3],
     'key2': [4, 5, 6],}
]

def external_function(key, value):
    return key + str(value)

other_list = [
    {
        k: [external_function(k, el) for el in v]
        for k, v in d.iteritems()
    }
    for d in my_list
]

[{'key1': ['key11', 'key12', 'key13'], 'key2': ['key24', 'key25', 'key26']}]

问题在于您的外部功能,您可以将其更改为:

def external_function(key, value): 
    E=0.0
    for v in value:
        E += ((v- key)/key)**2 
    return E

如果您想将其作为列表:

^{pr2}$

您的外部函数需要float/int,但它有一个列表,因此引发了错误

相关问题 更多 >

    热门问题