2014-09-25 2 views
-3

두 개의 목록을 사전으로 변환해야합니다. I는 A와 B두 개의 목록을 결합하여 사전을 만듭니다.

A = [1,2,3] [2,3,4] [1,4,5] [1,3,4]

두리스트를 명명했다 A (일람)의 값은 고유 한 것이다

B = [10,13,23] [22,21,12] [5,34,23] [10,9,8]

두리스트

길이

제가

C = [ '1'

같은 결과 필요 같을 것이다 : 10 '2'13 ', 3': 23] [ '2': 22 , '삼' : 21, '4': 12] [ '1': 5, '4': 34, '5': 23] [ '1': 10, '3': 9 ''4 ': 8]

dict 메소드를 시도했지만 목록이 해시 가능 유형이 아니라는 오류가 발생합니다. 이 작업을 수행하는 방법을 알려주십시오. 새로운 Python에 새로운.

+0

귀하의 입력이 유효 나열하지 않습니다. dicts는 중괄호로 가고 목록에는 콜론이 없기 때문에 결과물은 유효하지 않습니다. 또한 코드와 오류 메시지를 막연하게 설명하지 말고 실제 코드와 오류를 복사하여 붙여 넣으십시오. – abarnert

+0

@abarnert 입력 한 내용을 하위 목록 사이에 쉼표로 묶었습니다. 여기에 입력하는 동안 나는 그것을 놓쳤습니다. 출력은 하위 목록의 사전이어야합니다. – user3559583

+0

여기에 내용을 입력하지 마십시오. 질문을 나타내는 실제 실행 코드에서 복사하여 붙여 넣으십시오. 그리고 다시 출력을 설명하지 말고 원하는 출력을 표시하십시오. "하위 목록 사전"은 의미가 없으며 귀하의 질문에있는 내용과도 일치하지 않습니다. 우리는 당신이 가지고있는 것과 원하는 것을 _guess_ 할 수 있습니다. 그러나 대부분의 사람들은 우리가 너무 똑똑하기 때문에 대부분의 시간을 잘못 추측 할 것입니다. – abarnert

답변

1

그것은 확실하게 어렵다, 그러나 나는이 문제를 추측하고있어 이것이다 :

dict(zip(a, b)) 
:

a 경우와 b 숫자의 단지 평면을 나열했다, 당신이해야 할 것 모두가 이것이다

그리고 나는 당신이 쓴 것과 비슷하다고 생각합니다. 그러나 그것은 여기서 작동하지 않습니다. 그것들은 숫자 목록이 아니며 목록의 목록입니다. 그리고 당신은 딕트를 되 찾을 필요가 없습니다. 당신은 딕트리스트를 원합니다.

그래서 여러분은 키가 하위 목록 인 a이고 값이 b 인 하위 목록을 작성하도록 Python에 요청합니다. 목록은 키가 될 수 없으므로 오류입니다. 그러나 문제가 아니더라도 유용하지는 않습니다.

실제로 이렇게하려면, 당신은 ab 최대뿐만 아니라 zip에 필요하지만, 또한 하위 목록을 압축하고, dict에 그 하위 지퍼가 아닌 메인 지퍼를 전달합니다. 이와 같이 :

[dict(zip(suba, subb)) for (suba, subb) in zip(a, b)] 
+0

나는 그것을 이해하고 일한다 !!! 고맙습니다. @abarnert :) :) – user3559583

+0

나는 이것을 할 수있는 효율적인 방법 중 하나가 더 의심 스럽습니까? – user3559583

+0

@ user3559583 : 어떤 점에서 효율적입니까?속도를 의미하는 경우 실제 프로그램에서는 중요하지 않으므로 여기에서 마지막으로 걱정해야 할 사항입니다. 코드를 이해하고, 확장하거나, 반복 할 수있는 곳이나 미묘한 버그를 도입 할 수있는 곳을 줄이는 것에 대해 걱정하십시오. 효율성 이외의 것. – abarnert

0

나는 C가 사전의 목록이되기를 원한다고 생각한다. 이를 수행하는 간단한 방법이 있습니다.

def combine(keys, values): 
    "generate a dictionary from keys and values" 
    out = {} 
    for k,v in zip(keys,values): 
     out[k] = v 
    return out 

def combine_each(keys, values): 
    "for each pair of keys and values, make a dictionary" 
    return [combine(klist, vlist) for (klist,vlist) in zip(keys,values)] 

C = combine_each(A,B) 
0

대안 : 하위 목록 사이에 쉼표가 없기 때문에

>>> A = [[1,2,3], [2,3,4], [1,4,5], [1,3,4]] 
>>> B = [[10,13,23], [22,21,12], [5,34,23], [10,9,8]] 
>>> [{k:v for k, v in zip(sa, sb)} for (sa, sb) in zip(A, B)] 
[{1: 10, 2: 13, 3: 23}, {2: 22, 3: 21, 4: 12}, {1: 5, 4: 34, 5: 23}, {1: 10, 3: 9, 4: 8}] 
관련 문제