#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))