从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倍