使用代码解释更简单:
#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,我想我删除了所有对它的引用,但是如果我错过了任何内容请忽略它。
答案 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]
当然,如果您只是乱搞字典对象,那么之前的海报就有了正确的解决方案。