Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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列表中获取dict_Python_List_Python 2.7_Dictionary - Fatal编程技术网

从python列表中获取dict

从python列表中获取dict,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我有一个列表my_list=['a','b','c','d'],我需要创建一个如下所示的字典 { 'a': ['a', 'b', 'c', 'd'], 'b': ['b', 'a', 'c', 'd'], 'c': ['c', 'a', 'b', 'd'], 'd': ['d', 'a', 'b', 'c'] } 每个元素的值都是列表,但第一个元素是它自己 这是我的密码 my_list = ['1', '2', '3', '4'] my_dict=dict() for x

我有一个列表
my_list=['a','b','c','d']
,我需要创建一个如下所示的字典

{ 'a': ['a', 'b', 'c', 'd'], 
  'b': ['b', 'a', 'c', 'd'], 
  'c': ['c', 'a', 'b', 'd'], 
  'd': ['d', 'a', 'b', 'c'] }
每个元素的值都是列表,但第一个元素是它自己

这是我的密码

my_list = ['1', '2', '3', '4']
my_dict=dict()

for x in my_list:        
    n = my_lst[:]
    n.remove(x)
    n= [x] + n[:]
    my_dict[x] = n

print my_dict

{'1': ['1', '2', '3', '4'], 
 '3': ['3', '1', '2', '4'], 
 '2': ['2', '1', '3', '4'], 
 '4': ['4', '1', '2', '3']}
根据需要。
但我认为这不是最好的方法。任何优化的帮助都将不胜感激

你可以通过阅读字典来理解:

my_dict = {elem: list(sorted(my_list, key=lambda x: x != elem)) for elem in my_lst}
这是因为
sorted
函数执行稳定排序,并且
False
小于
True

编辑:此方法不太清晰,可能速度较慢,请谨慎使用。

对于较大的列表,可以使用比公认答案更快的方法

>>> seq
    ['a', 'b', 'c', 'd']

>>> {e: [e]+[i for i in seq if i != e] for e in seq}
    {'a': ['a', 'b', 'c', 'd'],
     'b': ['b', 'a', 'c', 'd'],
     'c': ['c', 'a', 'b', 'd'],
     'd': ['d', 'a', 'b', 'c']}
{e: [e] + seq[:i] + seq[i+1:] for i, e in enumerate(seq)}
相对时间:

In [1]: seq = list(range(1000))

In [2]: %timeit {e: [e]+[i for i in seq if i != e] for e in seq}
10 loops, best of 3: 40.8 ms per loop

In [3]: %timeit {e: [e] + seq[:i] + seq[i+1:] for i, e in enumerate(seq)}
100 loops, best of 3: 6.03 ms per loop

你绝对需要使用列表吗?显然,关键因素必须放在第一位,其余元素的顺序是否需要保持与原始列表相同?在我的电脑上慢3倍