我有一个嵌套列表,如下所示:
my_list = [['Raji GlovesSixSixOneRegular price',
'Sale price$9.95',
' Save 67%'],
['Comp Vortex GlovesSixSixOneRegular price',
'Sale price$9.95',
' Save 67%'],
["Shasta 3/4 Cycling Tights - Women'sSpecializedRegular price",
'Sale price$14.95',
' Save 79%']]
我想创建一个嵌套字典,这样,每个列表项中的第一个值是'ItemName',第二个值是'SalePrice',第三个值是'Saving'。例如:
dict = {1: {'ItemName': 'Comp Vortex GlovesSixSixOneRegular price',
'SalePrice': 'Sale price$9.95',
'Saving': ' Save 79%'},
2: {'ItemName': 'Raji GlovesSixSixOneRegular price',
'SalePrice': 'Sale price$9.95',
'Saving': ' Save 79%'},
3: {'ItemName': 'Shasta 3/4 Cycling Tights - WomensSpecializedRegular price',
'SalePrice': 'Sale price$14.95',
'Saving': ' Save 79%'}}
keys = ('ItemName', 'SalePrice','Saving')
我知道我可以这样做,如果我只是在列表中添加第一项:
values= my_list[0]
values
res = {}
for key in keys:
for value in values:
res[key] = value
values.remove(value)
break
res
但是如何在不删除值的情况下将其添加到字典中呢?感谢您的帮助
大概是这样的:
结果:
注意:
pprint
仅用于漂亮的字典,您不需要导入来使代码本身工作解决方案的工作原理如下:
enumerate()
函数的结果,该函数接受一个iterable并返回一个iterable,该iterable将每个元素与一个索引配对,例如:0
开始,所以这就是为什么在n
之后有一个+ 1
enumerate()
函数获取生成器表达式dict(<something>) for item in my_list)
的结果。枚举生成器表达式的示例如下:zip()
,它获取两个iterable并将结果配对,在本例中是内部字典所需的键['ItemName', 'SalePrice', 'Saving']
和原始列表中的列表,一个接一个,由生成器表达式传递给它。尝试运行以下命令:这应该会让你知道发生了什么
通常,如果您收到一段代码,但您无法真正说出原因,请尝试查看表达式是如何组合在一起的。如果你真的把它拆开,它看起来是这样的:
然后试着理解每一点,从内部开始。因此,在本例中,您需要了解
zip()
的作用。玩转函数,直到理解它,然后再上一层,看看dict()
对zip()
函数的结果做了什么。一旦你得到它,看看为什么它后面有一个for
(它是一个生成器),等等当然,如果您希望您的代码比其他任何代码都短,这是相同的,但很难理解:
我很感激你要求解释,因为这意味着你在努力学习,而不仅仅是抄袭答案——坚持下去
如果你真的想发疯,这是我的解决方案。很难描述
enumerate
基本上为数组中的每个元素返回两项,第一项是索引号,第二项是实对象。这样我们就可以在适当的位置计算。然后,我们将其指定为外部dict中的键,并将该键的值插入带有数组值的内部字典我还使用了
.strip
函数来删除不必要的空格等以下是上述解决方案的基本等式:
这是另一个简单的解决方案,在这里我们定义一个字典,并将起始数字定义为1,迭代
my_list
数组,然后在该迭代中分配一个字典。在字典中,我们可以从arr
对象填充输出
相关问题 更多 >
编程相关推荐