如何在python中从这个混合中创建两个新列表?
我正在尝试创建两个新列表,一个用于颜色,一个用于大小。如何在python中从这个混合中创建两个新列表?,python,Python,我正在尝试创建两个新列表,一个用于颜色,一个用于大小。 因此,我希望新代码是: resp["colors"] = ["Teal Combo", "Teal Combo"] resp["sizes"] = ["s","s"] 到目前为止,还没有骰子 resp = {} resp["color"] = ['Color:', 'Teal Combo', 'Size:', 'S', 'Color:', 'Teal Combo', 'Size:', 'S'] for i, s in e
因此,我希望新代码是:
resp["colors"] = ["Teal Combo", "Teal Combo"]
resp["sizes"] = ["s","s"]
到目前为止,还没有骰子
resp = {}
resp["color"] = ['Color:', 'Teal Combo', 'Size:', 'S', 'Color:', 'Teal Combo', 'Size:', 'S']
for i, s in enumerate(resp["color"]):
colors = []
sizes = []
print i , s
if s.lower() == 'Color:' and len(resp["color"]) > i+2:
colors.append(resp["color"][i+1])
sizes.append(resp["color"][i+2])
resp["colors"] = colors
resp["sizes"] = sizes
data=resp[“color”]
i=0
颜色=[]
大小=[]
当i时,有几种不同的方法可以将交替值的iterable转换为成对的iterable
在您的情况下,您使用的是序列(列表),因此我们可以通过切片和压缩来实现:
color = resp['color']
pairs = zip(color[::2], color[1::2])
::2
表示“从开头开始的切片,在结尾结束,并拾取第二个元素”,而1::2
表示相同的内容,但从元素1开始,而不是从开头开始
如果您想使用任意iterable,可以这样做:
color = resp['color']
icolor = iter(color)
pairs = zip(icolor, icolor)
>>> print(list(zip(color[::2], color[1::2]))
[('Color:', 'Teal Combo'),
('Size:', 'S'),
('Color:', 'Teal Combo'),
('Size:', 'S')]
这是itertools
文档中配方第二个或第三方库中更通用功能的特例:
如果您想了解,请单击链接
不管你怎么做,你都会得到这样的配对:
color = resp['color']
icolor = iter(color)
pairs = zip(icolor, icolor)
>>> print(list(zip(color[::2], color[1::2]))
[('Color:', 'Teal Combo'),
('Size:', 'S'),
('Color:', 'Teal Combo'),
('Size:', 'S')]
一旦有了这些配对,这应该很容易:
resp['colors'] = []
resp['sizes'] = []
for name, value in pairs:
if name == 'Color:':
resp['colors'].append(value)
elif name == 'Size:':
resp['sizes'].append(value)
或者,如果您想更全面地执行此操作:
result = collections.defaultdict(list)
for name, value in pairs:
result[name].append(value)
resp['colors'] = result['Color:']
resp['sizes'] = result['Size:']
甚至:
result = collections.defaultdict(list)
for name, value in pairs:
name = name.rstrip(':').lower() + 's'
result[name].append(value)
resp.update[result]
假设resp
(在问题的第一部分)是一本字典吗?谢谢你的回答。是否要使用python模块解决此问题?@slopeofhope:如果您确定resp['color']
的结构,那么:resp={'color':resp['color'][1:4:len(resp['color']),'size':resp['color'][3:4:len(resp['color'])]