2015-09-25 6 views
-1

Конечная цель создать следующий словарьPython - словарь со списками и кортежей

DictFinal = {'peach': [7,33], 'berries': [33,47], 'grapes': [47,98], 'apple': [98,200]} 

фрагменты кода

FinalEndofline = 200 
List1 = ["apple","peach","grapes","berries"] 
List2 = [98,7,47,33] 

Шаг1: Чтобы создать словарь, используя ключ value.List1 является ключом и List2 является значением.

professions_dict = dict(zip(List1, List2)) 
print professions_dict 

Output - {'apple': 98, 'peach': 7, 'grapes': 47, 'berries': 33} 

Шаг 2: Сортировка словаря на основе значения

sorted_x = sorted(professions_dict.items(), key=operator.itemgetter(1)) 
print sorted_x 

Output - {'peach': 7, 'berries': 33, 'grapes': 47, 'apple': 98} 

Шаг 3: Теперь, как я добиваюсь

DictFinal = {'peach': [7,33], 'berries': [33,47], 'grapes': [47,98], 'apple': [98,200]} 

Dictfinal снова значение ключа, но это значение, имеющее список с первым значением и вторым значением и продолжается, и он добавляет значение finalendofline в последний список значений

+0

Я не понимаю, что вы пытаетесь сделать или почему вы хотите это сделать. – TigerhawkT3

ответ

0
>>> List1 = ["apple","peach","grapes","berries"] 
>>> List2 = [98,7,47,33] 
>>> List1 = [x[1] for x in sorted(zip(List2, List1))] 
>>> List2.sort() 
>>> List2.append(200) 
>>> DictFinal = dict((key, List2[i:i+2]) for i, key in enumerate(List1)) 
>>> DictFinal 
{'berries': [33, 47], 'grapes': [47, 98], 'peach': [7, 33], 'apple': [98, 200]} 

Это довольно просто. Это, вероятно, немного более эффективно, хотя - требуется только один sort(). Если эффективность действительно имеет значение, вы также можете использовать itertools для выполнения фрагмента во втором zip (и, конечно же, с Python 2, вы хотели бы использовать izip вместо zip).

>>> List1 = ["apple","peach","grapes","berries"] 
>>> List2 = [98,7,47,33] 
>>> zipped = sorted(zip(List2, List1)) + [(200,)] 
>>> FinalDict = dict((x[1], [x[0], y[0]]) for x, y in zip(zipped, zipped[1:])) 
0

Возможно, попробуйте:

List2 = ["""Blah""",FinalEndofLine] 
unsorted = dict(zip(List1,[[List2[i],List2[i+1]] for i in range(len(l2) - 1)])) 
DictFinal = sorted(unsorted.items(), key = lambda x: x[1][0]) 

Это похоже на работу для меня, если я полностью понимаю вашу проблему. List2 просто нуждается в этом FinalEndofLine в конце.

Смежные вопросы