首先,我是Python的新手,因此如果我忽略了某些内容,我深表歉意,但是我想使用dict.fromkeys(或类似的名称)来创建列表的字典,该列表的键在另一个列表中提供。我正在执行一些计时测试,我希望键是输入变量,列表中要包含运行时间:

def benchmark(input):
    ...
    return time_taken

runs = 10
inputs = (1, 2, 3, 5, 8, 13, 21, 34, 55)
results = dict.fromkeys(inputs, [])

for run in range(0, runs):
    for i in inputs:
        results[i].append(benchmark(i))

我遇到的问题是字典中的所有键似乎都共享同一列表,并且每次运行都只是追加到列表中。有什么方法可以使用fromkeys为每个键生成唯一的空列表吗?如果不是,是否还有另一种方法可以手动生成结果字典呢?

最佳答案

问题是

results = dict.fromkeys(inputs, [])

[]仅在该位置被评估一次。

我会像这样重写这段代码:
runs = 10
inputs = (1, 2, 3, 5, 8, 13, 21, 34, 55)
results = {}

for run in range(runs):
    for i in inputs:
        results.setdefault(i,[]).append(benchmark(i))

其他选择是:
runs = 10
inputs = (1, 2, 3, 5, 8, 13, 21, 34, 55)
results = dict([(i,[]) for i in inputs])

for run in range(runs):
    for i in inputs:
        results[i].append(benchmark(i))

关于python - 如何使用dict.fromkeys为每个键创建唯一值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/654646/

10-12 00:52