我真的遇到了一个问题,我是python的新手,并将其用于典型的要求。我想将键值对添加到循环内的字典中,例如:
Eg_dict={}
for row in iterable:
dict={row[1],row[2]}
这段代码没有做我想要实现的,这只是将迭代的最后一条记录添加到字典中,很容易假设我的代码是从iterable中读取每条记录并一遍又一遍地重写字典。
所以我的问题很简单,如何在字典中添加iterable中的所有记录?这将是unix中数组的默认行为。
P.S:这里的iterable可以假设为csv.reader对象,我试图将第二列和第三列插入到字典中。
答案 0 :(得分:8)
使用字典赋值:
for row in iterable:
Eg_dict[row[1]] = row[2]
或者用dict理解来代替整个代码:
Eg_dict = {row[1]: row[2] for row in iterable} # python 2.7 and up
或
Eg_dict = dict(row[1:3] for row in iterable) # python 2.3 and up
如果每个row
都有固定数量的条目,则可以使用元组赋值:
for key, value in row: # two elements
或
for _, key, value in row: # three elements, ignore the first
使循环更具可读性。例如。 {key: value for _, key, value in iterable}
。
您的代码会在每个循环中创建一个新的 set 对象(只是唯一值,无键),替换前一个。
答案 1 :(得分:2)
你可以使用一个很好的列表理解:
d = dict([(row[1], row[2]) for row in iterable])
这适用于任何Python版本。
如果使用2.7+或3,则可以使用清洁词典理解:
d = {row[1]:row[2] for row in iterable}