列表理解,但对于字典?

List comprehension, but for dictionaries?

更 pythonic 的方式来执行以下操作?在这个例子中,我试图将评论(字典)构建为键值对,其中键是未修改的版本,值是来自函数的 return 值,其中键被传递为一个参数。

def func(word):
    return word[-1:-6:-1].upper()

subs = {
    'ALLOWED': ['one', 'two'],
    'DISALLOWED': ['three', 'four']
}

comments = {}
for sub in subs['ALLOWED']:
    # reverse and uppercase
    comments[sub] = func(sub)

print(comments)

有人推荐吗?完成这项工作并不完全重要,但我喜欢学习 python 习语和使我的代码更 pythonic 的方法。谢谢!

使用 dict comprehension 而不是在 for 循环中构建字典:

comments = {key: func(key) for key in subs['ALLOWED']}

删除循环并在函数内部用字典理解替换它。然后,你可以简单地return它。

此外,您可以使用 [::-1] 反转字符串 word,而不是您正在使用的复杂 [-1:-6:-1] 切片:

def func(words):
    return {word: word[::-1].upper() for word in words} 

这会产生同样的结果:

comments = func(subs['ALLOWED'])
print(comments)
# {'two': 'OWT', 'one': 'ENO'}