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

Python 如何访问和打印包含嵌套列表的字典值?,python,Python,我正在学习Python,对字典和嵌套列表的概念有点执着 我目前正在研究的实验室要求我们创建一个dict,其中一些键只有一个值列表,而其他键有两个或多个相关列表。下面的代码正确地打印了具有多个列表的键的列表元素,但是如果我将get语句更改为具有单个列表的键,则只会得到字符串的前两位数字 my_dict = {1: ['test', 'values'], 2: [['test2', 'value2'], ['test3', 'value3']], 3: [

我正在学习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

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

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)))
输出:

测试,值
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']]}
对于字符串,这将是字符串中的第X个字符(您可以将其视为字符列表)。对于列表,它将是列表中的第X项

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

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

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

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

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)。

是的,请参见,这就是数据结构不一致的问题。现在,你真的别无选择,只能检查项目的
类型,并分别处理每个案例。但是想想看,
item
将是
my_dict.get(2)
中的一个列表,但它将是
my_dict.get(1)
的一个字符串。当你索引到一个列表中时,你会得到它的元素。当你索引到一个字符串中时,你会得到单个字符。列表的深度有限制吗?如果仅限于一个列表或列表列表(而非列表列表列表等),请参阅@juanpa.arrivillaga的评论。对于本实验室,密钥仅限于每个列表1或2个。在现实世界中,我永远不会以这种方式编写代码,但为了通过我的课程,我必须让它工作。我没有考虑检查类型,但这似乎是一个非常合乎逻辑的方式来这里。谢谢你所拥有的和我需要完成的非常接近。基本上,我需要收回键值并打印它们,就像test,values和test4,value4一样。但是,我还需要键2以相同的方式打印新行上的每个列表。所以最终是test2,value2\n test3,value3。对不起。这还不是很清楚。请编辑您的问题并显示每个词典条目所需的输出。好的,这有助于澄清问题。请参阅我的最新答案。