循环遍历字典列表和列表值

时间:2016-07-26 22:02:03

标签: python python-2.7

假设我有两个词典的列表:

iter_list = [{0: [2, 1, 3], 
              1: [3, 2, 1], 
              2: [1, 2, 3], 
              3: [2, 3, 1], 
              4: [1, 2, 3], 
              5: [2, 3, 1]},
             {0: [2, 3, 1], 
              1: [1, 2, 3], 
              2: [1, 2, 3], 
              3: [1, 2, 3], 
              4: [2, 3, 1], 
              5: [1, 3, 2]}]

每个字典有6个键,编号为0到5。 我想按键的顺序一次一个地遍历每个字典,并使输出成为一对与键(按键值排序)和相应列表的第一个值,第一个值对应于第二个键等,然后是键和第二个值等。希望示例输出将澄清:

0 2
1 3
2 1
3 2
4 1
5 2
0 1
1 2
2 2
3 3
4 2
5 3
0 3
1 1
2 3
3 1
4 3
5 1
0 2 //2nd dictionary iteration 
1 1
2 1
3 1
4 2
5 1
0 3 
1 2
2 2
3 2
4 3
5 3
0 1
1 3
2 3
3 3
4 1
5 2

我只能弄清楚如何遍历第一个字典的第一个位置,但无法弄清楚如何使用[0]作为迭代变量来遍历值列表中的所有位置在继续下一本字典之前。

for i in iter_list:
    for key, value in i.iteritems():
            print key, value[0]

非常感谢任何帮助!谢谢!

4 个答案:

答案 0 :(得分:4)

如果我理解正确,在你的情况下,你需要迭代iter_list 3次

>>> for i in iter_list:
...     for x in range(3):
...         for key, value in i.iteritems():
...             print key, value[x]
...

输出:

0 2
1 3
2 1
3 2
4 1
5 2
0 1
1 2
2 2
3 3
4 2
5 3
0 3
1 1
2 3
3 1
4 3
5 1
0 2
1 1
2 1
3 1
4 2
5 1
0 3
1 2
2 2
3 2
4 3
5 3
0 1
1 3
2 3
3 3
4 1
5 2

答案 1 :(得分:2)

使用zipitertools.chain以及unpacking技巧的不同方法:

0 2
1 3
2 1
3 2
4 1
5 2
0 2
1 1
2 1
3 1
4 2
5 1
0 1
1 2
2 2
3 3
4 2
5 3
0 3
1 2
2 2
3 2
4 3
5 3
0 3
1 1
2 3
3 1
4 3
5 1
0 1
1 3
2 3
3 3
4 1
5 2

输出:

pairs = list(pairs)

注意:如果您想重新使用pairs,请务必使用+ (NSDate*)dateForTodayAtHour:(NSUInteger)hour andMinutes:(NSUInteger)minutes { NSDate* today = [NSDate date]; NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents* weekdayComponents = [gregorian components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:today]; [weekdayComponents setHour:hour]; [weekdayComponents setMinute:minutes]; [weekdayComponents setSecond:0]; NSDate* result = [gregorian dateFromComponents:weekdayComponents]; return result; }

答案 2 :(得分:1)

列表理解应该:

>>> output_list = [[k, d[k][i]] for d in iter_list for i in range(3) for k in sorted(d)]: 
>>> for k, dki in output_list:
...     print k, dki
...
0 2
1 3
2 1
3 2
4 1
5 2
0 1
1 2
2 2
3 3
4 2
5 3
0 3
1 1
2 3
3 1
4 3
5 1
0 2
1 1
2 1
3 1
4 2
5 1
0 3
1 2
2 2
3 2
4 3
5 3
0 1
1 3
2 3
3 3
4 1
5 2

答案 3 :(得分:1)

也许你想这样做:

>>> min(len(v) for k,v in i.iteritems() for i in iter_list)
3

假设字典中的值具有固定长度3,否则您必须弄清楚3来自何处。 例如,它可能是所有字典的所有值的最小值长度:

{{1}}