我需要创建一个字典,其格式为{1:100,2:99,3:98,...,100:1}
我正在乱搞并得到了这个
D = { }
keys = range(101)
i = 0
values = [100]
for i in keys:
for x in values:
x = i
D[x] = i
pass
print D
这有
的输出{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100}
所以我需要找到一种方法来反转它并摆脱0,我知道.reverse()不会在字典上工作而且
list(reversed(sorted(a.keys())))
刚刚把它排除在1:... 100:
之后答案 0 :(得分:4)
你可以这样做:
# Save the range object for efficiency
In [30]: nums = range(1, 101)
# Dict comprehension to with zip to produce the desired dict
In [31]: {f: r for f, r in zip(nums, nums[::-1])}
Out[31]:
{1: 100,
2: 99,
...
100: 1}
# Or use the dict constructor directly on the iterator returned by zip
In [32]: dict(zip(nums, nums[::-1]))
Out[32]:
{1: 100,
2: 99,
...
100: 1}
答案 1 :(得分:3)
您可以使用带有枚举和范围的字典理解来创建字典。
print( {k:v for k,v in enumerate(range(100,0,-1),1)})
#{1: 100, 2: 99, 3: 98, 4: 97, 5: 96, 6: 95, 7: 94, 8: 93, 9: 92, 10: 91, 11: 90, 12: 89, 13: 88, 14: 87, 15: 86, 16: 85, 17: 84, 18: 83, 19: 82, 20: 81, 21: 80, 22: 79, 23: 78, 24: 77, 25: 76, 26: 75, 27: 74, 28: 73, 29: 72, 30: 71, 31: 70, 32: 69, 33: 68, 34: 67, 35: 66, 36: 65, 37: 64, 38: 63, 39: 62, 40: 61, 41: 60, 42: 59, 43: 58, 44: 57, 45: 56, 46: 55, 47: 54, 48: 53, 49: 52, 50: 51, 51: 50, 52: 49, 53: 48, 54: 47, 55: 46, 56: 45, 57: 44, 58: 43, 59: 42, 60: 41, 61: 40, 62: 39, 63: 38, 64: 37, 65: 36, 66: 35, 67: 34, 68: 33, 69: 32, 70: 31, 71: 30, 72: 29, 73: 28, 74: 27, 75: 26, 76: 25, 77: 24, 78: 23, 79: 22, 80: 21, 81: 20, 82: 19, 83: 18, 84: 17, 85: 16, 86: 15, 87: 14, 88: 13, 89: 12, 90: 11, 91: 10, 92: 9, 93: 8, 94: 7, 95: 6, 96: 5, 97: 4, 98: 3, 99: 2, 100: 1}
Enumerate
使用辅助可选参数从该数字开始(在本例中为1),range
接受3参数(start, stop, steps)
编辑:似乎你不需要像Pault所指出的那样的词典理解:
dict(enumerate(range(100,0,-1),1))
会奏效。
答案 2 :(得分:3)
虽然其他答案是正确的,但我认为这是dict comprehension的一个好例子。它使代码更容易阅读和更pythonic
result = { i: 101 - i for i in range(1, 101)}
为了更好地使用变量,您可以使用变量重复使用代码,而不是对101
进行编码,因此:
num = 101
result = { i: num - i for i in range(1, num)}
答案 3 :(得分:1)
试试这个:
dict(zip(range(1,101),range(100,0,-1)))
您在此代码中所做的是首先使用range命令生成包含1-100 range(1,101)
和100-1 range(100,0,-1)
中所有数字的列表。您设置起点和终点(最终序列不包括结尾,这就是您放置101或0的原因)和间距(倒数时为-1)。
接下来,您制作一个列表,将这两个列表压缩在一起zip()
,为您提供[(1,100),(2,99),...(100,1)]
最后,dict
函数从这个元组列表中生成一个字典,其中第一个条目是键,第二个条目是值。所以,你的最终结果是
{1:100, 2:99, 3:98...100:1}
希望有所帮助!
答案 4 :(得分:1)
已经给出了最好的答案。 如果你仍然想要一个更简单的方法,这会有所帮助。 :)
D = {}
for i in range(1,101):
D[i]=101-i
print(D)