是否有更多Pythonic方法循环遍历列表,然后让每个循环变量更新字典?

时间:2017-11-10 04:05:55

标签: python list dictionary

我正在尝试编写更加pythonic或更简洁的方法,避免为循环编写太多。

基本上我有以下区块代码:

result = {}
for model_name in list_of_model_names:
    model_fields = _do_something(model_name)
    result['{}_fields'.format(model_name)] = model_fields
return result

本质上,我循环遍历字符串列表。每个字符串我将执行一些操作,以便该字符串的某些派生成为字典中的键和值对。

我正在阅读http://www.u.arizona.edu/~erdmann/mse350/topics/list_comprehensions.html

我知道:

  1. 地图返回列表
  2. 过滤器减少了元素数量
  3. Reduce看起来会返回列表中的本机数据类型。也许字符串或数字取决于原始列表。
  4. 我的代码正在运行,我想知道是否有更简洁或更pythonic的方式来遍历列表并让其循环变量影响字典的键和值。

2 个答案:

答案 0 :(得分:2)

您可以更简洁地使用:

result = {(name+'_fields'): _do_something(name) for name in list_of_model_names}

是否更具可读性或有用性取决于你。

答案 1 :(得分:2)

通常情况下,更多Pythonic方式不是使用mapfilterreduce,而是使用理解。

对于您的代码,那将是

result = {'{}_fields'.format(model_name): _do_something(model_name)
          for model_name in list_of_model_names}

理解也适用于列表和集合。