Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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_Dictionary_Tuples_Generator - Fatal编程技术网

如何在python中使用带元组的生成器表达式

如何在python中使用带元组的生成器表达式,python,dictionary,tuples,generator,Python,Dictionary,Tuples,Generator,我是python新手,所以我试图弄清楚如何使用带有整数元组的生成器表达式 我有以下结构: 多边形数:3 分块多边形: { 0:(6, 192, 365, 172, 388, 115, 378, 127, 311, 142, 305, 192, 334), 1:(4, 172, 688, 115, 678, 105, 650, 107, 634), 2:(6, 242, 294, 215, 278, 205, 250, 242, 205, 284, 221, 292,

我是python新手,所以我试图弄清楚如何使用带有整数元组的生成器表达式

我有以下结构:

多边形数:
3

分块多边形:

{
    0:(6, 192, 365, 172, 388, 115, 378, 127, 311, 142, 305, 192, 334), 
    1:(4, 172, 688, 115, 678, 105, 650, 107, 634), 
    2:(6, 242, 294, 215, 278, 205, 250, 242, 205, 284, 221, 292, 234)
}
其中,块化多边形是字典对象 第一项
6192365…等
其中6是该列表中的坐标数

我想将其转换为一个坐标字典,如下所示:

{
    0:{
        0:(192, 365),  
        1:(172, 388), 
        2:(115, 378), 
        3:(127, 311),
        4:(142, 305), 
        5:(192, 334)
    },
}, etc... 
results = {}
for k, v in data.items():
    it = iter(v[1:])
    results.update({k: dict(enumerate(zip(it, it)))})
pprint(results)

关于如何有效地做到这一点,您有什么想法吗?

这有点神秘,但可以通过理解来实现您想要的功能,假设变量
poly
开始时包含您的原始值:

print( {pkey:{n:(v[n],v[n+1]) for n in range(1,len(v),2)} for pkey,v in poly.items()} )
一般来说,我认为这不是很“Pythonic”,因为它有点难读。我很想访问您的原始数据结构,看看您是否创建了一个以某种方式封装行为的类。

您可以这样做:

d = {
    0: (6, 192, 365, 172, 388, 115, 378, 127, 311, 142, 305, 192, 334), 
    1: (4, 172, 688, 115, 678, 105, 650, 107, 634), 
    2: (6, 242, 294, 215, 278, 205, 250, 242, 205, 284, 221, 292, 234)
}

pprint({k: dict(enumerate(zip(vs[1::2], vs[2::2]))) for k, vs in d.iteritems()})
请注意,每个元组中的第一个元素可以忽略,除非您需要执行一些错误检查

输出:

{0: {0: (192, 365),
     1: (172, 388),
     2: (115, 378),
     3: (127, 311),
     4: (142, 305),
     5: (192, 334)},
 1: {0: (172, 688), 1: (115, 678), 2: (105, 650), 3: (107, 634)},
 2: {0: (242, 294),
     1: (215, 278),
     2: (205, 250),
     3: (242, 205),
     4: (284, 221),
     5: (292, 234)}}

下面是第一个字典键的示例:

data = {
    0: (6, 192, 365, 172, 388, 115, 378, 127, 311, 142, 305, 192, 334), 
    1: (4, 172, 688, 115, 678, 105, 650, 107, 634), 
    2: (6, 242, 294, 215, 278, 205, 250, 242, 205, 284, 221, 292, 234)
}

it = iter(data[0][1:])
result = dict(enumerate(zip(it, it)))
from pprint import pprint
pprint(result)
输出

{0: (192, 365), 1: (172, 388), 2: (115, 378), 3: (127, 311), 4: (142, 305), 5: (192, 334)} {0: {0: (192, 365), 1: (172, 388), 2: (115, 378), 3: (127, 311), 4: (142, 305), 5: (192, 334)}, 1: {0: (172, 688), 1: (115, 678), 2: (105, 650), 3: (107, 634)}, 2: {0: (242, 294), 1: (215, 278), 2: (205, 250), 3: (242, 205), 4: (284, 221), 5: (292, 234)}} 输出

{0: (192, 365), 1: (172, 388), 2: (115, 378), 3: (127, 311), 4: (142, 305), 5: (192, 334)} {0: {0: (192, 365), 1: (172, 388), 2: (115, 378), 3: (127, 311), 4: (142, 305), 5: (192, 334)}, 1: {0: (172, 688), 1: (115, 678), 2: (105, 650), 3: (107, 634)}, 2: {0: (242, 294), 1: (215, 278), 2: (205, 250), 3: (242, 205), 4: (284, 221), 5: (292, 234)}} {0: {0: (192, 365), 1: (172, 388), 2: (115, 378), 3: (127, 311), 4: (142, 305), 5: (192, 334)}, 1: {0: (172, 688), 1: (115, 678), 2: (105, 650), 3: (107, 634)}, 2: {0: (242, 294), 1: (215, 278), 2: (205, 250), 3: (242, 205), 4: (284, 221), 5: (292, 234)}}
图中所示的石斑鱼食谱应该会有所帮助。