首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python更新dict列表中的值?

Python更新dict列表中的值?
EN

Stack Overflow用户
提问于 2020-07-02 17:55:31
回答 3查看 69关注 0票数 0

我正在尝试从dict中转换嵌套列表中的值

代码语言:javascript
运行
复制
list1 =  [["a","b"],["c"],["a","d"]]

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

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

预期产出

代码语言:javascript
运行
复制
new_list = [["app","bold"],["cafe"],["app","dot"]]

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

我试过的是:

代码语言:javascript
运行
复制
result = [[dict_form[i] for i in j] for j in new_list]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-02 18:12:12

另一种方法是只使用map:

代码语言:javascript
运行
复制
list(map(lambda x: list(map(dict_form.get, x)), list1))

产出:

代码语言:javascript
运行
复制
[['app', 'bold'], ['cafe'], ['app', 'dot']]

略有变化:

代码语言:javascript
运行
复制
[*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方法在列表变得更大时执行得最好。

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 17:58:14

使用二级列表理解。

代码语言:javascript
运行
复制
result = [[dict_form[k] for k in sublist] for sublist in list1]
print(result) # [['app', 'bold'], ['cafe'], ['app', 'dot']]

200 k迭代的20个循环上的Timeit

代码语言:javascript
运行
复制
# 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

所以在正常的列表长度上表现更多,在巨大的列表上也是如此(见德里克·波斯特)

票数 4
EN

Stack Overflow用户

发布于 2020-07-02 18:11:52

下面是如何使用嵌套列表理解:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
[['app', 'bold'], ['cafe'], ['app', 'dot']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62702366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档