Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Dictionary - Fatal编程技术网

Python 如果我有字典中的值列表,我可以对这些值列表执行条件压缩吗?

Python 如果我有字典中的值列表,我可以对这些值列表执行条件压缩吗?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我创建了以下目录: dct = {'T': [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0]], 'B': [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]], 'J': [[0, 0, 1, 0, 0], [0, 0, 0, 0, 1]], 'K': [0, 0, 0, 0, 1]} 请注意,每个值都是单个列表或多个列表。我试图弄清楚是否可以对每个键的值列表进行有条件压缩(或提供所需输出的

我创建了以下目录:

dct = {'T': [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0]], 'B': [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]], 'J': [[0, 0, 1, 0, 0], [0, 0, 0, 0, 1]], 'K': [0, 0, 0, 0, 1]}
请注意,每个值都是单个列表或多个列表。我试图弄清楚是否可以对每个键的值列表进行有条件压缩(或提供所需输出的其他解决方案)。条件是,如果连续值列表上的1彼此之间的距离在2个索引值的范围内,我只希望值列表为给定的键压缩在一起

我希望此输入dict的最终输出如下所示:

zp_dict = {'T': [2, 1, 0, 1, 0], 'B': [[0, 1, 0, 0, 0], [0, 1, 0, 0, 0]], 'J': [0, 0, 1, 0, 1], 'K': [0, 0, 0, 0, 1]}
请注意,“T”和“J”的值列表应压缩在一起,因为非零值之间的间隔不超过2个索引,但“B”的值列表应保持独立,因为非零值之间的间隔为3个索引,“K”值列表应单独保留

为了说明我要做的事情,考虑下面的代码,这些代码几乎是我想做的,但是没有条件:

zp_dict = {}

for k, v in dct.items():

    zp_dict[k] = [sum(x) for x in zip(*v)]
这将生成以下新dict,这对于键“B”是错误的:

zp_dict = { 'T': [2, 1, 0, 1, 0], 'B': [0, 1, 0, 0, 1], 'J': [0, 0, 1, 0, 1], 'K': [0, 0, 0, 0, 1]}

这在技术上实现了您所要求的结果。但是,我假设您希望将所有内容添加到一起,前提是至少有两个列表的编号在彼此的两个索引内。例如,
[[1,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1]
将导致
[1,1,0,0,1]
而不是
[[1,1,0,0,0,0],[0,0,0,1]
,尽管最后一个列表的编号与任何其他列表相距超过2个索引


代码将列表相加,然后找出前两个非零数字之间的距离。如果他们是我认为没有必要投反对票。。。他显然已经做出了努力。。。只是他没有以任何我能理解的方式完全解释标准
dct = {
    'T': [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0]], 
    'B': [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]], 
    'J': [[0, 0, 1, 0, 0], [0, 0, 0, 0, 1]], 
    'K': [[0, 0, 0, 0, 1]]
}

zp_dict = {}

for k, v in dct.items():
    sum_list = [sum(x) for x in zip(*v)]
    first_non_zero = next((i for i, n in enumerate(sum_list) if n), 0)
    second_non_zero = next((i for i, n in enumerate(sum_list[first_non_zero+1:]) if n), 0)
    zp_dict[k] = sum_list if second_non_zero < 2 else v

print(zp_dict)
>>{'T': [2, 1, 0, 1, 0], 'B': [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]], 'J': [0, 0, 1, 0, 1], 'K',: [0, 0, 0, 0, 1]}
zp_dict[k] = [sum(x) for x in zip(*v) if conditionTest(v)]
zp_dict[k] = sumFunction(v)