我有一个日期列表,想要创建一个字典,将当天的前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)
的工作原理?
答案 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'}
个元组,然后将其输入到list
。 dict
(相当于 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}