Преобразование ключей из строки в тип int в словаре Python со смешанными типами ключей - PullRequest
0 голосов
/ 23 сентября 2019

Рассмотрим словарь Python со смешанными типами ключей:

chrDict = {'1':234,'12':45,'23':121,'2':117,'chX':12,'chY':32}

Я хочу преобразовать эти ключи в строковом типе в тип int, которые являются числовыми, а остальные оставить.Результат, который я ожидаю:

chrDict = {1:234,12:45,23:121,2:117,'chX':12,'chY':32}

Я попробовал следующее:

chrDict.update((int(i),j) for i,j in chrDict.items())

Это дает мне ошибку:

TypeError: cannot convert dictionary update sequence element #0 to a 
sequence

Затем я попытался:

for i,j in chrDict.items():
    try:
        chrDict.update(int(x),y)
    except:
        pass

Но вывод, который я получаю, не верен, он не меняется:

{'1': 234, '12': 45, '23': 121, '2':117, 'chX': 12, 'chY': 32}

На самом деле я хочу сделать это, чтобы потом было легче сортировать.В настоящее время, если я пытаюсь:

sorted(chrDict.items())

Это дает мне следующий вывод:

[('1', 234), ('12', 45), ('2', 117), ('23', 121), ('chX', 12), ('chY', 32)]

Значение ключа 2 должно следовать после значения ключа 1, которого не происходит.

Поэтому, пожалуйста, дайте мне несколько советов по решению этой проблемы.Есть ли лучший подход к этой проблеме?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Используйте словарь с isdigit(), чтобы проверить строки, которые на самом деле являются числами:

{int(k) if k.isdigit() else k: v for k, v in chrDict.items()}

Пример :

chrDict = {'1':234,'12':45,'23':121,'2':117,'chX':12,'chY':32}

print({int(k) if k.isdigit() else k: v for k, v in chrDict.items()})
# {1: 234, 12: 45, 23: 121, 2: 117, 'chX': 12, 'chY': 32}
0 голосов
/ 23 сентября 2019

Похоже, пост Остина отвечает на ваш конкретный запрос.Обратите внимание, что это создает новый словарь (без редактирования текущего словаря на месте).

Кроме того, Python не может сравнивать тип int с типом str для сортировки спискасодержащий оба типа данных (это вызовет ошибку TypeError в Python 3) - поэтому вы можете рассмотреть другой подход, если вашей конечной целью является создание отсортированного списка смешанных типов данных (или создание собственного пользовательского сравнения).

...