python - 创建以动态数量的值作为参数的字典

标签 python function dictionary arguments

我在尝试让脚本作为函数运行时遇到了一些麻烦。

下面的代码基本上压缩了多个值列表。所以我可以继续添加 list4 , list5

list1 = ['USA', 'France', 'China']
list2 = [30, 39, 28]
list3 = [59.2, 93.1, 922.1]

dictionary = {}

for i in range(len(list1)):
    d[list1[i]] = list2[i], list3[i]

print(dictionary)

我正在寻找类似这样的输出:

{'USA': (30, 59.2), 'France': (39, 93.1), 'China': (28, 922.1)}

现在我想把它变成一个函数,比如:

def zipMultiple(*values, keys):

    dictionary = {}

    for i in range(len(keys)):
        dictionary[keys[i]] = values[i]

    return dictionary

myDict = zipMultiple(list2, list3, keys=list1)

我收到这个错误:

dictionary[keys[i]] = values[i] IndexError: tuple index out of range

我知道这可能是因为分配了 values[i]好像它是一个列表,但我不知道如何将它概括为“为每个作为参数给出的 values(列表)创建一个元组。

最佳答案

您需要执行 a transpose operation以便键与值适当对齐:

def zipMultiple(*values, keys):
    dictionary = {}
    
    values = list(map(tuple, zip(*values)))
    for i in range(len(keys)):
        dictionary[keys[i]] = values[i]

    return dictionary

或者,您可以将其设为单行(建议改进 Joffan ):

def zipMultiple(*values, keys):
    return dict(zip(keys, zip(*values)))

在这两种情况下,输出都是:

{'USA': (30, 59.2), 'France': (39, 93.1), 'China': (28, 922.1)}

解释:

如果您打印出函数内的(如最初传入的那样),您将看到:

([30, 39, 28], [59.2, 93.1, 922.1])

第一个列表包含每个键的第一个元素,第二个列表包含每个键的第二个元素,依此类推。

但是,这不是我们所追求的。我们希望第一个元素包含第一个键的所有元素,第二个元素包含第二个键的所有元素,等等;我们正在寻找类似以下内容:

[
    (30, 59.2),
    (39, 93.1),
    (28, 922.1)
]

这样键的排列方式与值的排列方式相同。为此,我们执行上面所示的转置操作。

关于python - 创建以动态数量的值作为参数的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71946971/

相关文章:

Python 数组旋转

python - 带有 plotly express 4 的子图

function - 这个函数签名在sml中是什么意思?

C - 想要将 struct 类型的函数放在单独的 .c 文件中

python - 从 Pandas 系列的值中查找键

python - 列表外的 "list comprehension"样式语法?

python - NGINX、uWSGI 和 Flask 未运行子进程

java - 将字符串转换为另一个字符串

JavaScript函数声明错误

python - 给出字典的笛卡尔积