如果我使用Dicts名称创建变量,如何在dict中查找值?

时间:2012-01-11 01:30:24

标签: python

使用代码解释更简单:

#test data
Day1={  
      'data1':0,
      'data2':   1,
      'data3':    2,
      'data4':    3,
      'data5':    4,
      'data6':    5,
      'data7':    4,
      'data8':    3,
      'data9':    2,
      'data10':    1}

Day2= {  
       'data1':    2,
       'data2':    3,
       'data3':    4,
       'data4':    5,
       'data5':    6,
       'data6':    6,
       'data7':    7,
       'data8':    6,
       'data9':    4,
       'data10':    3}

Day3= {    
       'data1':    2,
       'data2':    4,
       'data3':    5,
       'data4':    6,
       'data5':    7,
       'data6':    6,
       'data7':    8,
       'data8':    6,
       'data9':    5,
       'data10':    4}

Day4= {   
       'data1':    2,
       'data2':    4,
       'data3':    5,
       'data4':    6,
       'data5':    7,
       'data6':    6,
       'data7':    6,
       'data8':    8,
       'data9':    5,
       'data10':    4}

AllData= {'Day1':Day1,'Day2':Day2,'Day3':Day3,'Day4':Day4}


#Number of items in AllData dictionary
AllDataSize = len(AllData)
CurrentDayCounter=0

while CurrentDayCounter < AllDataSize:
    CurrentDayCounter=CurrentDayCounter+1
    CurrentDay = 'Day%s' % (CurrentDayCounter)
    #print AllData[CurrentDay]
    #add the nodes
    for day in AllData[CurrentDay]:
        print CurrentDay
        day = "%s" % (day)
        print CurrentDay[day] #does not work gives an error: TypeError: string indices must be integers, not str
        print CurrentDay[1] #works by providing a result 'a', which is the second letter in Day
        #print 'For ', CurrentDay, ' subgroup ', day,' contains ', CurrentDay[day], ' has been added to graph.'
        dayName =  "%s-%s" % (CurrentDay, Day1[day])
        #Do not create edges if its the first day
        if CurrentDay != "Day1":
            yesterday = CurrentDayCounter - 1
            print 'today is ', CurrentDayCounter, ' and yesterday is ', yesterday

当我打印CurrentDay[day]时出现错误:TypeError: string indices must be integers, not str但是CurrentDay [1]给出了一个结果(这是变量的中间字母。我想用变量来搜索字典而不是拉字母位置。

我怀疑的方式,我这样做是完全错误的,所以有正确的方法吗?

谢谢! 附:对不起的代码感到抱歉,我只是在使用networkx,我想我删除了所有对它的引用,但是如果我错过了任何内容请忽略它。

3 个答案:

答案 0 :(得分:1)

for day in AllData[CurrentDay]:

AllData[CurrentDay]dict。使用day对此进行迭代会导致day采用所有值。因此,'data1''data2'等等。这些不是字符串中的合适索引。

修好后,取出

day = '%s' % (day)
也有点。那太傻了;如果您想要的话,那么强制该值就是字符串。

答案 1 :(得分:1)

那一行(65)应该是:

print AllData[CurrentDay][day] 

出现错误消息是因为print CurrentDay[day]打印了字符串day中的CurrentDay个字符

答案 2 :(得分:1)

为什么要使用dicts?您使用的密钥是列表索引的冗余替换。

例如:

AllData = [ [0, 1, 2, 3, 4, 5, 4, 3, 2, 1], [2, 3, 4, 5, 6, 6, 7, 4, 3],  ...  ]

您可以通过以下方式调用每个值:

AllData[Some_Day][Some_Data]

当然,如果您只是乱搞字典对象,那么之前的海报就有了正确的解决方案。