Python - 为单个值分配多个密钥

时间:2014-10-26 00:26:23

标签: python dictionary key range key-value

我希望能够在Python中为这些值分配以下键:

  • 数字01 - 10:5.01
  • 数字11 - 20:7.02
  • 数字21 - 30:9.03
  • 数字31 - 40:11.04
  • 数字41 - 50:15.00
  • 数字51 - 60:17.08
  • 数字61 - 70:19.15

我知道这是可能的:

rates = dict.fromkeys(range(1, 11), 5.01)
rates.update(dict.fromkeys(range(11, 21), 7.02)
# ...etc

那没关系。但是,有没有办法在Python中的一行或一个初始化列表中执行此操作?

1 个答案:

答案 0 :(得分:4)

使用字典理解和初始映射:

numbers = {1: 5.01, 11: 7.02, 21: 9.03, 31: 11.04, 41: 15.0, 51: 71.08, 61: 19.15}
numbers = {k: v for start, v in numbers.items() for k in range(start, start + 10)}

演示:

>>> from pprint import pprint
>>> numbers = {1: 5.01, 11: 7.02, 21: 9.03, 31: 11.04, 41: 15.0, 51: 71.08, 61: 19.15}
>>> numbers = {k: v for start, v in numbers.items() for k in range(start, start + 10)}
>>> pprint(numbers)
{1: 5.01,
 2: 5.01,
 3: 5.01,
 4: 5.01,
 5: 5.01,
 6: 5.01,
 7: 5.01,
 8: 5.01,
 9: 5.01,
 10: 5.01,
 11: 7.02,
 12: 7.02,
 13: 7.02,
 14: 7.02,
 15: 7.02,
 16: 7.02,
 17: 7.02,
 18: 7.02,
 19: 7.02,
 20: 7.02,
 21: 9.03,
 22: 9.03,
 23: 9.03,
 24: 9.03,
 25: 9.03,
 26: 9.03,
 27: 9.03,
 28: 9.03,
 29: 9.03,
 30: 9.03,
 31: 11.04,
 32: 11.04,
 33: 11.04,
 34: 11.04,
 35: 11.04,
 36: 11.04,
 37: 11.04,
 38: 11.04,
 39: 11.04,
 40: 11.04,
 41: 15.0,
 42: 15.0,
 43: 15.0,
 44: 15.0,
 45: 15.0,
 46: 15.0,
 47: 15.0,
 48: 15.0,
 49: 15.0,
 50: 15.0,
 51: 71.08,
 52: 71.08,
 53: 71.08,
 54: 71.08,
 55: 71.08,
 56: 71.08,
 57: 71.08,
 58: 71.08,
 59: 71.08,
 60: 71.08,
 61: 19.15,
 62: 19.15,
 63: 19.15,
 64: 19.15,
 65: 19.15,
 66: 19.15,
 67: 19.15,
 68: 19.15,
 69: 19.15,
 70: 19.15}

字典表达式为循环的每次迭代生成键和值。该表达式中有两个循环,您需要按照该顺序从左到右读取它们。写出一个非理解的循环集,你会得到:

numbers = {1: 5.01, 11: 7.02, 21: 9.03, 31: 11.04, 41: 15.0, 51: 71.08, 61: 19.15}
output = {}
# loop over the (key, value) pairs in the numbers dictionary
for start, v in numbers.items():
    for k in range(start, start + 10):
        output[k] = v
numbers = output

基本上原始numbers字典中的键被转换为范围,以在输出字典中形成10个新键,所有键都具有相同的值。