通过使用map lambda或list comprehension从列表中使用键来迭代地查找字典中的值

2024-04-20 04:23:13 发布

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

我有一本字典

d={1: [3, 6, 9], 3: [1, 6, 9], 6: [1, 3, 9], 9: [1, 3, 6], 2: [4, 7], 4: [10, 7], 7: [2, 4], 5: [8, 10], 8: [5, 10], 10: [5, 8, 11], 11: [10, 8, 3]}

以及一系列

x=pd.Series([3,8,9])

对于list的每个值,我想在dictionary中找到相应的值。你知道吗

我正在使用for循环

for i in range(len(x)):
    n=d[x.iloc[i]]

预期输出为

[1, 3, 6]

但是,由于数据有1.6米的行,for循环正在减慢这个过程。我觉得地图拉姆达法,或者列表理解法可以提高速度。但我在这两方面都有困难,我试过这样的方法

n=[d[x] for i in range(len(x))]

,但它不起作用。有什么办法能达到目标吗


Tags: 数据in列表fordictionarylen字典过程
2条回答

IIUC公司

pd.Series(d).loc[x]
Out[47]: 
3    [1, 6, 9]
8      [5, 10]
9    [1, 3, 6]
dtype: object

如果需要列表

pd.Series(d).loc[x].tolist()
Out[68]: [[1, 6, 9], [5, 10], [1, 3, 6]]

这应该比使用所有iloc更快:

for i in x:
    n=d[i]

对于这次1000个数字的列表:147µs±7.51µs每个循环(7次运行的平均值±标准偏差,每个10000个循环)

当OPs与ILOC循环时: 每个回路33.8 ms±1.35 ms(平均±标准偏差7次,每个回路10次)

相关问题 更多 >