Преобразование словаря в кортежи

#python

#python

Вопрос:

У меня есть следующий словарь:

 myDict = {0:{'value1':25,'value2':2500},1:{'value1':35,'value2':1000}}
  

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

 ((25,2500),(35,1000))
  

Используя приведенный ниже код, создайте одномерный кортеж для ключа 0. Однако я хотел бы создать многомерный кортеж.

 tup = tuple(myDict[0].values())
  

Комментарии:

1. tuple(x.values() for x in myDict.values()) ? И если вам действительно нужно tuple из tuples , tuple(tuple(x.values()) for x in myDict.values())

Ответ №1:

просто сделайте это с помощью простого цикла:

 tuple(tuple(x.values()) for x in myDict.values())
  

если вам нужно отсортировать результат по ключу dict, вы можете сделать это с помощью sorted

 tuple(tuple(v.values()) for k, v in sorted(myDict.items()))
  

Комментарии:

1. Однако это не обязательно приведет к выводу значений dict в том же порядке. Если вам не повезет, вы можете получить ((25,2500),(1000,35)) .

2. @Aran-Fey если OP не использует OrderedDict, обойти это невозможно. OP должен определить, каковы его требования в порядке

3. @Gillespie Конечно, есть способ обойти это. Вы можете сгенерировать список всех существующих ключей (например, ['value1', 'value2'] ), а затем использовать его, чтобы всегда выводить значения в таком порядке.

4. @Aran-Fey добавил второе решение с сортировкой по ключу dict

5. @Aran-Fey Как я уже сказал, OP должен определить, каковы его требования. Возможно, он передает кортежи в какие-то математические функции, которые вычисляют средние значения, и порядок в этом случае не имеет значения.

Ответ №2:

Это вернет tuple s по порядку,

 >>> myDict
{0: {'value2': 2500, 'value1': 25}, 1: {'value2': 1000, 'value1': 35}}
>>> tuple((v['value1'], v['value2']) for k,v in sorted(myDict.items()))
((25, 2500), (35, 1000))
#   # order based on keyfunc ?
>>> tuple((v['value1'], v['value2']) for k,v in sorted(myDict.items(), key=lambda x: x[1]['value1']))
((25, 2500), (35, 1000))