我正在学习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
答案 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)。