Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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/1/amazon-web-services/13.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_List - Fatal编程技术网

python中内部列表元素的列表列表分组

python中内部列表元素的列表列表分组,python,list,Python,List,我有一个列表,如: List = [['Server1','Server2','Server4','Server6','EnvName1','become_a'], ['Server2','Server3','Server1','Server5','EnvName2','become_a'], ['Server4','Server3','Server7','Server6','EnvName3','become_b'], ['Server5','S

我有一个列表,如:

List = [['Server1','Server2','Server4','Server6','EnvName1','become_a'],
        ['Server2','Server3','Server1','Server5','EnvName2','become_a'],
        ['Server4','Server3','Server7','Server6','EnvName3','become_b'],
        ['Server5','Server1','Server2','Server3','EnvName4','become_a'],
        ['Server4','Server2','Server1','Server7','EnvName5','become_b']]
我的列表中包含的是服务器的名称、运行它的环境以及用于在它们上执行ssh的帐户,我想在它们上运行一些shell脚本,但不想在它们上为不同的环境执行冗余ssh连接。所以我想把他们分组。我的分组应该像所有具有相同服务器的EnvNames一样,并且been帐户应该在列表中分组,以便我只在该服务器上执行一次ssh,如果两个EnvNames的服务器相同,但been帐户不同,那么我希望它们位于单独的列表中

我的最终列表应该如下所示:

Final_List = [['Server1','EnvName1,EnvName2,EnvName4','become_a'],
              ['Server1','Envname5','become_b'],
              ['Server2','EnvName1,Envname2','become_a'],
              ['Server2','EnvName5','become_b'],
              ['Server3','EnvName2,EnvName4','become_a'],
              ['Server3','EnvName3','become_b'],
              ['Server4','EnvName1','become_a'],
              ['Server4','EnvName3,EnvName5','become_b'],
              ['Server5','EnvName5','become_a'],
              ['Server6','EnvName1','become_a'],
              ['Server6','EnvName3','become_b'],
              ['Server7','EnvName3,EnvName5','become_b']]

我试图对它们进行分组,但结果出了严重错误

您希望对服务器和帐户名上的条目进行分组

使用字典进行分组,键入元组:

grouped = {}
for entry in List:
    env, account = entry[-2:]
    for server in entry[:-2]:
        key = server, account
        grouped.setdefault(key, []).append(env)
分组后,您可以列出以下内容作为最终输出:

Final_List = [[server] + environments + [account]
              for (server, account), environments in sorted(grouped.items())]
这将为环境字符串生成单独的条目。您可以使用以下命令将其放入一个字符串中:

Final_List = [[server, ','.join(environments), account]
              for (server, account), environments in sorted(grouped.items())]
演示:


不确定OP是否需要它,但
'EnvName1、EnvName2、EnvName4'
等。。被分为单个组strings@PadraicCunningham:还添加了一个连接名称的选项。
>>> List = [['Server1','Server2','Server4','Server6','EnvName1','become_a'],
...         ['Server2','Server3','Server1','Server5','EnvName2','become_a'],
...         ['Server4','Server3','Server7','Server6','EnvName3','become_b'],
...         ['Server5','Server1','Server2','Server3','EnvName4','become_a'],
...         ['Server4','Server2','Server1','Server7','EnvName5','become_b']]
>>> grouped = {}
>>> for entry in List:
...     env, account = entry[-2:]
...     for server in entry[:-2]:
...         key = server, account
...         grouped.setdefault(key, []).append(env)
... 
>>> [[server] + environments + [account]
...               for (server, account), environments in sorted(grouped.items())]
[['Server1', 'EnvName1', 'EnvName2', 'EnvName4', 'become_a'],
 ['Server1', 'EnvName5', 'become_b'],
 ['Server2', 'EnvName1', 'EnvName2', 'EnvName4', 'become_a'],
 ['Server2', 'EnvName5', 'become_b'],
 ['Server3', 'EnvName2', 'EnvName4', 'become_a'],
 ['Server3', 'EnvName3', 'become_b'],
 ['Server4', 'EnvName1', 'become_a'],
 ['Server4', 'EnvName3', 'EnvName5', 'become_b'],
 ['Server5', 'EnvName2', 'EnvName4', 'become_a'],
 ['Server6', 'EnvName1', 'become_a'],
 ['Server6', 'EnvName3', 'become_b'],
 ['Server7', 'EnvName3', 'EnvName5', 'become_b']]
>>> [[server, ','.join(environments), account]
...               for (server, account), environments in sorted(grouped.items())]
[['Server1', 'EnvName1,EnvName2,EnvName4', 'become_a'],
 ['Server1', 'EnvName5', 'become_b'],
 ['Server2', 'EnvName1,EnvName2,EnvName4', 'become_a'], 
 ['Server2', 'EnvName5', 'become_b'],
 ['Server3', 'EnvName2,EnvName4', 'become_a'],
 ['Server3', 'EnvName3', 'become_b'],
 ['Server4', 'EnvName1', 'become_a'],
 ['Server4', 'EnvName3,EnvName5', 'become_b'],
 ['Server5', 'EnvName2,EnvName4', 'become_a'],
 ['Server6', 'EnvName1', 'become_a'],
 ['Server6', 'EnvName3', 'become_b'],
 ['Server7', 'EnvName3,EnvName5', 'become_b']]