Мне нужно создать словарь, который выходит как {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: ...

3
rippleEffect 22 Фев 2018 в 22:09

5 ответов

Лучший ответ

Хотя другие ответы верны, я думаю, что это хороший пример для понимания слова . Это делает код более легким для чтения и более питоническим

result = { i: 101 - i for i in range(1, 101)}

Чтобы сделать его еще лучше, вы можете сделать код многоразовым, используя переменную вместо харакодирования 101, так:

num = 101
result = { i: num - i for i in range(1, num)}
3
fasouto 22 Фев 2018 в 19:14

Вы можете использовать dict понимание с enumerate и range для создания словаря.

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)

Редактировать: кажется, вам не нужно понимание, как Пол указал:

dict(enumerate(range(100,0,-1),1))

Должно сработать.

3
MooingRawr 22 Фев 2018 в 19:34

Попробуй это:

dict(zip(range(1,101),range(100,0,-1)))

В этом коде вы сначала создаете список со всеми числами от 1 до 100 range(1,101) и от 100 до 1 range(100,0,-1) с помощью команды range. Вы устанавливаете начальную и конечную точки (конечная последовательность не включает конец, поэтому вы поставили 101 или 0) и интервал (-1 при обратном отсчете).

Затем вы создаете список из этих двух списков, упакованных вместе zip(), который дает вам [(1,100),(2,99),...(100,1)]

Наконец, функция dict делает словарь из этого списка кортежей, где первая запись - это ключ, а вторая - это значение. Итак, ваш окончательный результат

{1:100, 2:99, 3:98...100:1}

Надеюсь, это поможет!

1
Raw Dawg 22 Фев 2018 в 20:30

Наилучшие возможные ответы были даны. Если вам все еще нужен более простой подход, это поможет. :)

D = {}
for i in range(1,101):
    D[i]=101-i
print(D)
1
arundeepak 22 Фев 2018 в 19:23

Ты можешь сделать:

# 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}
4
heemayl 22 Фев 2018 в 19:45