2014-12-23 5 views
1

필자는 파이썬에서 tuple_list의 None을 tuple_list1의 해당 값으로 바꾸기 위해 Index-Match (Excel로 생각) 유형 공식을 원한다.목록의 값을 파이썬의 인덱스로 바꾸기

내 코드 :

tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)] 
tuple_list1 = [("orange, 10"),("plum", 10),("kumquat", 23)] 

for item in tuple_list: 
    if item[1] == None: 
     item[1] = tuple_list[tuple_list1.index(item[0])][1] 

print tuple_list 

내 오류 :

ValueError: 'kumquat' is not in list 

원하는 출력 :

[("pineapple", 5), ("cherry", 7), ("kumquat", 23), ("plum", 10)] 
+0

코드 2 행에 오타가 있습니다. '("orange, 10") 대신'(orange ", 10)'이 있어야합니다. – Nebril

답변

1

:하지만, 당신은 새로운 튜플을 생성해야하고 이전 다음

은 당신이하고 싶은 일을 할 것입니다 몇 가지 코드의 교체거야 이 데이터 형식을 사용하려면 tuple_list1을 필터링하여 필요한 데이터를 가져와야합니다.

tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)] 
tuple_list1 = [("orange", 10),("plum", 10),("kumquat", 23)] 

for key, item in enumerate(tuple_list): 
    if item[1] == None: 
     tuple_list[key] = (item[0], [x for x in tuple_list1 if x[0] == item[0]][0][1]) 

print tuple_list 
0

당신은 당신의 tuple_list 및 tuple_list1 반전되었다. 파괴 라인이 있어야한다 : [0] 항목에, 당신은 튜플의 구성 요소를 찾고 아니에요을 사용해서는 안

또한
tuple_list1[tuple_list.index(item)][1] 

, 당신은 전체 튜플

의 인덱스를 찾고

또 다른 문제는 튜플의 요소를 수정할 수 없다는 것입니다. 그들은 불변이다. 당신이 필요로하는 경우에 당신은 아마에 대한 사전을 사용해야합니다

tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)] 
tuple_list1 = [("orange, 10"),("plum", 10),("kumquat", 23)] 

for item in tuple_list: 
    if item[1] == None: 
     ind = tuple_list.index(item) 
     ind2 = [i for i in range(len(tuple_list1)) if tuple_list1[i][0] == item[0]][0] 
     tuple_list[ind] = (item[0], tuple_list1[ind2][1]) 

print tuple_list 
+0

이것은 아마도 작동하지 않습니다. 당신의 코드에서'item'은 tuple_list에있는 같은 튜플이 아닙니다. 당신은 튜플의 상상력에 대해 맞습니다. – Nebril

+0

항목은 실제로 tuple_list에있는 항목과 정확히 일치합니다. 그냥 파이썬 인터프리터에서 시도 ... –

0

당신은 tuple_listtuple_list1을 반복하고 새로운 목록을 필터링 할 수 있습니다 바로 지금, 0의 인덱스로 같은 값을 가진 모든 튜플이 있었다. 그리고 새로운리스트에서 그것을 대체합니다. 그것은 끝날 때까지 반복됩니다.

Heres my soulution. 새로운 목록이 만들어집니다.

tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)] 
tuple_list1 = [("orange", 10),("plum", 10),("kumquat", 23)] 

tuple_list = [(v1[0], [v2 for v2 in tuple_list1 if v2[0] == v1[0]][0][1]) if v1[1] == None else v1 for v1 in tuple_list] 

print tuple_list 
관련 문제