簡體   English   中英

Python 從字典更新列表中的值?

[英]Python Update values in list from dict?

我正在嘗試從 dict 轉換嵌套列表中的值

list1 =  [["a","b"],["c"],["a","d"]]

list2 =  [["a","b"],["c"],[""],["a","d"]]

dict_form = {"a":"app","b":"bold","c":"cafe","d":"dot"}

預期 output

new_list = [["app","bold"],["cafe"],["app","dot"]]

result_1 = [["app","bold"],["cafe"],[""],["app","dot"]]

我試過的:

result = [[dict_form[i] for i in j] for j in new_list]

使用 2 級列表理解

result = [[dict_form[k] for k in sublist] for sublist in list1]
print(result) # [['app', 'bold'], ['cafe'], ['app', 'dot']]

Timeit在 20 次 20 萬次迭代的循環上

# List comprehension : [[dict_form[k] for k in sublist] for sublist in list1]
python -m timeit -r 20 -n 200000 -s "list1 =  [['a','b'],['c'],['a','d']];dict_form = {'a':'app','b':'bold','c':'cafe','d':'dot'}" "[[dict_form[k] for k in sublist] for sublist in list1]"
200000 loops, best of 20: 1.74 usec per loop

# list/map : list(map(lambda x: list(map(dict_form.get, x)), list1))
python -m timeit -r 20 -n 200000 -s "list1 =  [['a','b'],['c'],['a','d']];dict_form = {'a':'app','b':'bold','c':'cafe','d':'dot'}" "list(map(lambda x: list(map(dict_form.get, x)), list1))"
200000 loops, best of 20: 3.2 usec per loop

所以在正常列表長度上性能更高,在大列表上也一樣(見 Derek 帖子)

以下是如何使用嵌套列表推導:

list1 =  [["a","b"],["c"],["a","d"]]
dict_form = {"a":"app","b":"bold","c":"cafe","d":"dot"}
new_list = [[dict_form[k] for k in ls] for ls in list1]
print(new_list)

Output:

[['app', 'bold'], ['cafe'], ['app', 'dot']]

另一種方法是只使用 map:

list(map(lambda x: list(map(dict_form.get, x)), list1))

output:

[['app', 'bold'], ['cafe'], ['app', 'dot']]

輕微變化:

[*map(lambda x: [*map(dict_form.get, x)], list1)]

作為@azro 時間安排的后續行動,我生成了一個更大的輸入 list1 具有相同的結構..

使用來自 OP 的當前輸入,大約:

嵌套列表理解 = 0.000000833 s

map 方法 = 0.000001440 s

map 方法變化 = 0.000001180 s

有一個更大但相似的列表,大約:

嵌套列表理解 = 0.054890156 s

map 方法 = 0.050899744 s

map 方法變化 = 0.065859318 s

所以我想最有效的解決方案(從提供的解決方案中)取決於您的實際列表的大小,似乎 map 方法往往會隨着列表變大而表現最好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM