Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中从这个混合中创建两个新列表?_Python - Fatal编程技术网

如何在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'])]