如何访问和打印包含嵌套列表的字典值?

时间:2017-12-05 22:33:03

标签: python

我正在学习Python,并且对字典和嵌套列表的概念感到困惑。

我正在研究的实验室要求我们创建一个dict,其中一些键只有一个值列表,而其他键有两个或多个列表关联。下面的代码正确打印了具有多个列表的键的列表元素,但是如果我将get语句更改为具有单个列表的键,我只需获取该字符串的前两位数。

my_dict = {1: ['test', 'values'],
           2: [['test2', 'value2'], ['test3', 'value3']],
           3: ['test4', 'value4']}

for item in my_dict.get(2):
   print('%s, %s' %(item[0], item[1]))

有人会解释如何从字典中访问列表值,无论密钥是单个列表还是多个列表?

如果使用密钥1或3,最终输出

test, values  or test4, value4

如果选择了键2,则输出为

test2, value2
test3, value3

3 个答案:

答案 0 :(得分:0)

根据您在问题中添加的更新信息和评论,这似乎适用于您正在处理的具体案例:

my_dict = {1: ['test', 'values'],
           2: [['test2', 'value2'], ['test3', 'value3']],
           3: ['test4', 'value4']}

for key, values in my_dict.items():
    if not isinstance(values[0], list):  # Not a nested list-of-lists?
        print(', '.join(map(str, values)))
    else:
        for value in values:
            print(', '.join(map(str, value)))

输出:

test, values
test2, value2
test3, value3
test4, value4

要处理问题代码中显示的单个字典值,您可以执行与上述类似的操作,如下所示:

elems = my_dict.get(2)
if not isinstance(elems[0], list):  # Not a nested list-of-lists?
    print(', '.join(map(str, elems)))
else:
    for value in elems:
        print(', '.join(map(str, value)))

输出:

test2, value2
test3, value3

评论虽然这可能很明显,但如果您可以使字典更加一致,这将更容易,其中的值始终列表列表如下图所示:

my_dict = {1: [['test', 'values']],
           2: [['test2', 'value2'], ['test3', 'value3']],
           3: [['test4', 'value4']]}

答案 1 :(得分:0)

Evaluation of item[x] is equivalent to item.__getitem__(x).对于字符串,这将是字符串中的第x个字符(您可以将其视为字符列表)。对于列表,它将是列表中的第x个项目。

您可以使用isinstance来确定更高级别列表中的每个项目是字符串还是列表:

if isinstance(item, list):
    # Do something with list
elif isinstance(item, str):
    # Do something with string
else:
    raise TypeError("expected list or string")

您还可以考虑如何使用递归函数来完成此任务。

答案 2 :(得分:0)

我不确定这是不是您的意思,但下面的代码会打印出每个文字值:

my_dict= {1: ['test', 'values'], 
      2: [['test2', 'value2'], ['test3', 'value3']], 
      3: ['test4', 'value4']}


for key, value in my_dict.items():
    for x in value:
        if not isinstance(x, list):
            print(x)
        else:
            for y in x:
                print(y)

#output
test
values
test2
value2
test3
value3
test4
value4

因此,循环遍历字典,并通过字典中每个值的每个元素(x)创建一个子循环。如果x本身不是列表,则打印x。如果x是一个列表,则循环遍历x,打印x中包含的每个元素(y)。