需要为字典赋值,字典的名称存储在变量中(Python)

时间:2011-04-10 18:36:38

标签: python

我有两个与以下代码有关的问题:

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'

请告诉我,我的理解不正确,如何纠正代码。

等待你的回复..提前谢谢

2 个答案:

答案 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

查看evalexec上的文档。使用全局变量和局部变量(记录与eval相同的页面)可能会略微减少滥用。我不认为这些方法中的任何一种特别是pythonic:嵌套的dicts可能更好。