2016-03-03 43 views
1

我有两个列表python-结合列表和使他们的字典

one=[1,3] 
elements=["a","b","c","d"] 

所以,我想创造一个one被视为关键和elements视为值和输出应该是这样的一个

dictionary-
{'1': ['a'], '3': [["b"],["c"],["d"]] } 
+0

有比键更多的值。他们应该如何划分?你没有告诉我们。 –

+0

好吧!所以'one'和'elements'不是固定的。它们是任意的。但它的总是'len(元素)>'len(一)'。如果假设'len(one)是3'[2,1,5]',那么'key 2'将具有'element [0]和element [1]'作为值。 'key1'将有'element [2]'作为值,'key5'将有'element [3] element [4] element [5] element [6] element [7]'作为值 – user5661083

+0

所以基本上这些键是定义链接的值的数量 – user5661083

回答

1

一个解决方案,应该为one任意长度的工作:

d = {} 

# Create a 1-to-1 mapping for the first n-1 items in `one` 
for i in one[:-1]: 
    d[i] = [elements.pop(0)] 

# Append the remainder of `elements` 
d[one[-1]] = [elements] 

或者用字典-COMP:

或在一个很好的易于阅读的线:

d = {i:[elements.pop(0)] for i in one[:-1]}.update({one[-1]:[elements]}) 
+0

@zondo为什么?我正在迭代'one [: - 1]',而不是整个列表 – DaveBensonPhillips

+0

对于偶然的观察者(包括我自己),似乎'd [one [-1]] = elements'正在覆盖'd [1 [-1]],但由于使用'one [: - 1]'而不是'one',因此d [one [-1]]还没有被定义。我提到这一点,以便没有人犯这个错误,我几乎做了错误投票的错误答案。 – zondo

+0

'extend'虽然不起作用;是不是'd [one [-1]]'等于一个角色?这还不是一个名单 – DaveBensonPhillips

3

假设元件的长度总是> =长度之一,并假设你尝试映射一对一和元件之间的一个:

d= {} 
for item in one: 
    d[str(item)] = element[:item] 
    del element[:item] 

因此,这将创建一个列表,按您的例子

+0

@zondo使用它可以让OP更好地理解。但流行似乎很好..将使用它 –

+1

我甚至没有注意到'项目'中的项目指定了多少'元素'键来!这是最好的解决方案。 – DaveBensonPhillips

1

你可以尝试拼接在每次迭代的列表中你的关键价值,这也应该同时采取基于len(key)

outDict = {} 
start = 0 
for key in keys: 
    outDict[str(key)] = elements[start:start+key] 
    start+=key 

print(outDict) 

运行它,这样的事情

keys=[1,2,3] 
elements=["a","b","c"] 
不是可用元素的护理

{ '1':[ 'A'], '2':[ 'b', 'C'], '3':[]}