这就是我在做的事情:
其中数据是[[int1, int2, int3], [int1, int2,int3]]
。
我想要一个类似于{int1: [int2, int3], in2:[int2, int3]}
的词典。
我在字典理解之前检查数据的大小是1417。
然后我检查字典的长度是多少,它是11,我不知道数据列表发生了什么,因为所有元素都没有被复制到containsBacon
。
def makeComprehension(data):
containsBacon = dict([(movies[2], movies[0:2]) for movies in data])
答案 0 :(得分:0)
这是一种方法:
>>> l = [[1,2,3], [10,20,30]]
>>> d = {m[0]:m[1:] for m in l}
>>> d
{1: [2, 3], 10: [20, 30]}
请注意,并非所有元素都在结果字典中,因为如果两个列表以相同的元素开头,则会创建相同的键,因此不会出现。
如果您想在结果词典中包含所有原始元素,可以执行以下操作:
>>> l = [[1,2,3], [10,20,30], [1,5,6]
>>> {m[0]:[x for n in l if n[0]==m[0] for x in n[1:]] for m in l}
{1: [2, 3, 5, 6], 10: [20, 30]}
答案 1 :(得分:0)
类似于@DevShark的答案,但具有销毁结构:
public static void Run([TimerTrigger("0 */5 * * * *", RunOnStartup = IS_DEBUG)])
如果要连接给定键的值,请不要使用dict理解:
>>> L = [[1,2,3], [10,20,30], [1,5,6]]
>>> {k:v for k,*v in L}
{1: [5, 6], 10: [20, 30]}
>>> d = {}
>>> for k,*v in L: d.setdefault(k, []).extend(v)
...
>>> d
{1: [2, 3, 5, 6], 10: [20, 30]}
方法将创建setdefault
条目,并将其设置为空列表(如果不存在)。
这个解决方案是@DevShark答案中的O(n)vs O(n ^ 2)。
这是另一个O(n)版本:
d[k]
>>> import functools
>>> functools.reduce(lambda d,m:{**d, m[0]:d.get(m[0], []) + m[1:]}, L, {})
{1: [2, 3, 5, 6], 10: [20, 30]}
已更新为之前的值+ d[m[0]]
如果您想理解字典,可以将m[1:]
用于O(n lg n)解决方案:
itertools.groupby