Python - 通过迭代创建一个字典

时间:2017-01-12 20:33:40

标签: python list dictionary syntax

我有一个日期列表,想要创建一个字典,将当天的前3个字母映射到全名。

我试过了:

day=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
daydict = dict()
for d in day:    
    daydict.update({d[:3]:d})

给出了理想的结果但是,我偶然发现了看起来更干净的代码。

daydict = dict((d[:3],d)for d in day)

我不理解这种语法。请解释dict((d[:3],d)for d in day)的工作原理?

3 个答案:

答案 0 :(得分:3)

实现这一目标的更好方法是使用 dict comprehension 表达式:

x <- c("aa-bbb-cccc", "aa-vvv-vv", "aa-ddd")
sub("^([^-]*-[^-]*).*", "\\1", x)
## => [1] "aa-bbb" "aa-vvv" "aa-ddd"

在您的解决方案中,您正在创建>>> day=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] >>> {d[:3]:d for d in day} {'Wed': 'Wednesday', 'Sun': 'Sunday', 'Fri': 'Friday', 'Tue': 'Tuesday', 'Mon': 'Monday', 'Thu': 'Thursday', 'Sat': 'Saturday'} 个元组,然后将其输入到listdict(相当于 list comprehension 表达式返回 generator 表达式)返回的值将为:

[(d[:3],d) for d in day]

我们假设此值存储为[('Mon', 'Monday'), ('Tue', 'Tuesday'), ('Wed', 'Wednesday'), ('Thu', 'Thursday'), ('Fri', 'Friday'), ('Sat', 'Saturday'), ('Sun', 'Sunday')] 变量。当您将其输入到my_dict时,您将获得所需的dict对象:

dict

答案 1 :(得分:2)

这是它的作用。

OBJECT_NAME()

对于dict((d[:3],d)for d in day)中的每个变量,day返回元组,其中包含2个值。第一个值是从d取得的[:3]符号,第二个值是“d”。 最后,它在迭代中形成了每个元组的字典。

更清楚

d

答案 2 :(得分:2)

dict接受一个列表(更确切地说是一个迭代器)的元组(它将成为键值对)作为参数(还有其他选项来初始化它);这有效:

daydict = dict([('Mon', 'Monday'), ('Tue', 'Tuesday'), ('Wed', 'Wednesday'),
                ('Thu', 'Thursday'), ('Fri', 'Friday'), ('Sat', 'Saturday'), 
                ('Sun', 'Sunday')])

你正在写的是那里的捷径:一个字典理解(你不创建完整的列表只是你的键值对的迭代器; dict构造函数在移动中迭代它们。

python现在支持更紧凑的版本:

daydict = {d[:3]: d for d in day}