2017-10-13 59 views
-1

我會盡我所能地嘗試和解釋我的情況。列表清單並將其與另一個清單關聯

我有一個包含名稱

name_list = ["Bob" , "Henry" , "Jeff" , "Harry"] 

幷包含數字

number_list = ["1,4,2,3" , "4,3,1,2" , "3,2,4,1" , "1,2,3,4" , "4,3,2,1" , "1,2,4,3"] 

我竭力拿出這將創造各種各樣,這將關聯的理貨代碼另一個列表中的一個列表每個名稱在name_list中具有其對應位置

即,

"result" = Bob - 1:3 , 2:0 , 3:1 , 4:2 
      Henry- 1:0 , 2:3 , 3:2 , 4:1 
      Jeff - 1:1 , 2:2 , 3:1 , 4:2 
      Harry- 1:2 , 2:1 , 3:2 , 4:1 

這實際上可以實現嗎?因爲我認爲我現在已經有一段時間了,我需要絕望的幫助。我對這段代碼的思考過程是統計出現的每個數字的出現次數,然後(因爲這個代碼用於即時徑流投票系統)決定誰擁有最高的1次計數,依此類推。

這是一個即時徑流投票代碼的一部分和關於如果我在正確的軌道上是非常可取

+0

我認爲「沒有什麼是不可能的」。 – SteveFest

回答

0

你可以嘗試這方面的消息:

name_list = ["Bob" , "Henry" , "Jeff" , "Harry"] 
number_list = ["1,4,2,3" , "4,3,1,2" , "3,2,4,1" , "1,2,3,4" , "4,3,2,1" , "1,2,4,3"] 
new_number_list = [list(map(int, i.split(","))) for i in number_list] 
final_data = {a:{c:sum(d[i] == c for d in [e for e in new_number_list if e != a]) for c in new_number_list[i]} for i, a in enumerate(name_list)} 

輸出:

{'Bob': {1: 3, 2: 0, 3: 1, 4: 2}, 'Jeff': {1: 1, 2: 2, 3: 1, 4: 2}, 'Harry': {1: 2, 2: 1, 3: 2, 4: 1}, 'Henry': {1: 0, 2: 3, 3: 2, 4: 1}} 

編輯:保持所有值的排序,你可以使用這個:

new_final_data = {a:sorted(b.items(), key=lambda x:x[0]) for a, b in final_data.items()} 

輸出:

{'Henry': [(1, 0), (2, 3), (3, 2), (4, 1)], 'Bob': [(1, 3), (2, 0), (3, 1), (4, 2)], 'Harry': [(1, 2), (2, 1), (3, 2), (4, 1)], 'Jeff': [(1, 1), (2, 2), (3, 1), (4, 2)]} 
+0

感謝您的回覆! 我的意思是我的問題是,在new_final_data中,我想要在number_list中的位置0處出現1的實例,然後在number_list中的位置0處出現2個實例...等 然後重複該位置1 for number_list出現1等。 –

+0

@HY所以你想要在number_list中的每個數字中的每個數字出現在其當前位置的次數? – Ajax1234

+0

是的!這正是我的意思。如果可能的話,你可以做到沒有任何導入的功能? –

0

這裏是我會怎麼做,我不知道,如果你需要一個功能,因爲你沒有指定

from collections import Counter 
from itertools import chain 

# first lets create a list of dictionaries mapping each name to a number 
maps = [dict(zip(name_list, chunk.split(','))) for chunk in number_list] 

[{'Bob': '1', 'Harry': '3', 'Henry': '4', 'Jeff': '2'}, 
{'Bob': '4', 'Harry': '2', 'Henry': '3', 'Jeff': '1'}, 
{'Bob': '3', 'Harry': '1', 'Henry': '2', 'Jeff': '4'}, 
{'Bob': '1', 'Harry': '4', 'Henry': '2', 'Jeff': '3'}, 
{'Bob': '4', 'Harry': '1', 'Henry': '3', 'Jeff': '2'}, 
{'Bob': '1', 'Harry': '3', 'Henry': '2', 'Jeff': '4'}] 

for name in name_list: 
    temp = Counter() 
    # counter object where name is the key, value is another counter object 
    temp.update({name: Counter(map(lambda x: x.get(name), maps))}) 
    num = len(temp.values()[0].keys()) 
    # create string to format 
    fmt = '{} has {} occurences, ' * num 
    print '{} - '.format(name) + fmt.format(*list(chain.from_iterable(temp.values()[0].items()))) 

Bob - 1 has 3 occurences, 3 has 1 occurences, 4 has 2 occurences, 
Henry - 3 has 2 occurences, 2 has 3 occurences, 4 has 1 occurences, 
Jeff - 1 has 1 occurences, 3 has 1 occurences, 2 has 2 occurences, 4 has 2 occurences, 
Harry - 1 has 2 occurences, 3 has 2 occurences, 2 has 1 occurences, 4 has 1 occurences,