如何在python中使用带元组的生成器表达式
我是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,
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)}}
图中所示的石斑鱼食谱应该会有所帮助。