如何从值为python2.7中的列表列表的字典中进行选择?

时间:2016-11-08 19:38:46

标签: python python-2.7 dictionary

我有一个包含键值对的字典,因为它们是。值是列表或列表列表。

对于看起来像这样的字典:

    d={}
    d['FM_001323'] = [[45,11232],[300,400],[65,700]]
    d['FM_094326'] = [11500,12500]

如果我想通过每个键看到值中每个列表的第一个条目,我不能像我可以做的那样,如果每个条目都是列表列表:

    for j in d:
           for i in range(0,len(d[j]):
                  print d[j][i][0]

因为我的字典中的第二个键只有一个值列表,而不是列表列表,[0]索引没有任何引用。这有意义吗?

我想隔离每个键的每个列表值中的第一个条目。使用列表值或列表值列表很容易,但将它们混合在一起会使它变得复杂。

我也愿意采用更简单的方法来达到同一目标。对于上下文:我试图通过FM_ figure将值中的数字与此代码的其他部分的变量进行比较。任何隔离这些的方法对我来说都足够了。

预期输出

    45
    300
    65
    11500

5 个答案:

答案 0 :(得分:3)

一种做法是"Asked Forgiveness Not Permission"

d={}
d['FM_001323'] = [[45,11232],[300,400],[65,700]]
d['FM_094326'] = [11500,12500]

for j in d:
    for i in range(0,len(d[j])):
        try:
            print(d[j][i][0])
        except TypeError:
            print(d[j][0])
            break

打印:

45
300
65
11500

基本上只是在try块中执行它并捕获将抛出的异常,如果它没有解决并再次尝试使用其他东西。

编辑OP以获得所需的输出。刚刚在第一次打印后退出循环,因为你的第二个for循环是在那里循环遍历子列表吗?你没有子列表,所以要突破它

答案 1 :(得分:1)

d={}
d['FM_001323'] = [[45,11232],[300,400],[65,700]]
d['FM_094326'] = [11500,12500]
for k in d:
    for v in d[k]:
        if isinstance(v, list): 
            print v[0]    
        else:
            print v

输出:45 300 65 11500 12500

答案 2 :(得分:1)

或更清洁,更短:

d={}
d['FM_001323'] = [[45,11232],[300,400],[65,700]]
d['FM_094326'] = [11500,12500]

for j in d.itervalues():
    for i in j:
        if isinstance(i,list):
            print(i[0])
        else:
            print(i)

答案 3 :(得分:1)

代码中只需要一行。您应该检查元素类型。像这样:

for j in d:
    for i in range(0,len(d[j])):
        #See the line below.
        if type(d[j][i]) == type([]):
           print(d[j][i][0])
        else
            print(d[j][i])

注意:如果您只想打印第一个元素,而d [j]只有数字而没有列表。你可能需要运行一个额外的循环来找出d [j]中是否有任何列表。请参阅以下代码:

for j in d:
    #Check if all elements in d[j] are int.
    for i in d[j]:
        if type(i) ==type([]):
            break
    else:
        print(d[j][0])
        continue

    for i in range(0,len(d[j])):
        #See the line below.
        if type(d[j][i]) == type([]):
           print(d[j][i][0])
        else:
            print(d[j][i])

因此,对于 d [j] = [11500,[1,2],1300] ,将打印 11500 1 1300

答案 4 :(得分:0)

另一种方法是首先转换为str并继续r'\[{0-9}+',这将提供所有主要元素:

from __future__ import print_function
import re

d={}
d['FM_001323'] = [[45,11232],[300,400],[65,700]]
d['FM_094326'] = [11500,12500]

for v in d.values():
    print('\n'.join(s[1:] for s in re.findall(r'\[[0-9]+', str(v))))