Python - 包含列表和元组的字典
Python - Dictionary with Lists and tuples
创建以下词典的最终目标
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]
Step1 : 使用键值创建字典。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 变量附加到最后一个值列表
也许试试:
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
。
>>> 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:]))
创建以下词典的最终目标
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]
Step1 : 使用键值创建字典。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 变量附加到最后一个值列表
也许试试:
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
。
>>> 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:]))