我有两个与以下代码有关的问题:
data = csv.DictReader(open('dc_sample.csv'), delimiter=',')
device_names = ['dev1', 'dev2', 'dev3'] #
for row in data:
for word in device_names: #
name = word + '_data' # To create dictionaries with variable names (eg. dev1_data)
vars()[name] = {} #
if word == row['Device']:
vars()[name] = vars()[name].update(row) ###
################ OR #################
word + 'data' = word + 'data'.update(row) ##
1)“data”是由csv模块创建的对象,它从csv-file读取。 “data”采用字典的形式,但有多行。我想创建类似的多个词典,其中包含其他键和词典。同一device_name的“data”值。 即对于Device = dev1,创建一个包含所有其他键的字典:创建值(名为dev1_data)。
2)另请告诉我,如何修改字典/列表,其variable_name存储在另一个变量中。 例如。 name = word +'data'
请告诉我,我的理解不正确,如何纠正代码。
等待你的回复..提前谢谢
答案 0 :(得分:1)
word + 'data' = ...
之类的东西不起作用。你根本不需要这样做。为什么要“创建具有变量名称的字典”?你应该只使用字典:
output = {}
for row in data:
for word in device_names:
name = word + '_data' # To create dictionaries with variable names (eg. dev1_data)
output[name] = {}
if word == row['Device']:
output[name] = output[name].update(row) ###
但似乎这段代码不会像output[name] = {}
那样频繁地运作。
也许你想要像
这样的东西output = {dev_name+ '_data' : {} for dev_name in device_names}
for row in data:
dev_name = row['Device']
if dev_name in device_names:
output[dev_name+ '_data'].update(row)
答案 1 :(得分:0)
我会使用嵌套的dicts而不是一堆各种名称的dicts,但问题2的例子:
adict = {'a': 1, 'b':2}
whichdict = 'adict'
eval(whichdict)['b'] = 3
print(adict) #{'a': 1, 'b': 3}
问题1:
newname = 'foo_data'
exec(newname + '= {}')
print(foo_data) #empty dict
查看eval和exec上的文档。使用全局变量和局部变量(记录与eval相同的页面)可能会略微减少滥用。我不认为这些方法中的任何一种特别是pythonic:嵌套的dicts可能更好。