Python 如何访问和打印包含嵌套列表的字典值?
我正在学习Python,对字典和嵌套列表的概念有点执着 我目前正在研究的实验室要求我们创建一个dict,其中一些键只有一个值列表,而其他键有两个或多个相关列表。下面的代码正确地打印了具有多个列表的键的列表元素,但是如果我将get语句更改为具有单个列表的键,则只会得到字符串的前两位数字Python 如何访问和打印包含嵌套列表的字典值?,python,Python,我正在学习Python,对字典和嵌套列表的概念有点执着 我目前正在研究的实验室要求我们创建一个dict,其中一些键只有一个值列表,而其他键有两个或多个相关列表。下面的代码正确地打印了具有多个列表的键的列表元素,但是如果我将get语句更改为具有单个列表的键,则只会得到字符串的前两位数字 my_dict = {1: ['test', 'values'], 2: [['test2', 'value2'], ['test3', 'value3']], 3: [
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。对不起。这还不是很清楚。请编辑您的问题并显示每个词典条目所需的输出。好的,这有助于澄清问题。请参阅我的最新答案。