Словари Python: создание ключа: значение ключа и добавление новых значений - PullRequest
0 голосов
/ 05 июля 2018

РЕДАКТИРОВАТЬ: мой вопрос получил много дополнительных вопросов, потому что на первый взгляд, это не имеет никакого смысла. Для большинства людей словари являются нелогичным способом решения этой проблемы. Я согласен, и был расстроен моими ограничениями (объяснено в комментариях). В моем сценарии исходные пары KV будут кодироваться как данные, которые будут считываться другим сервером с использованием ObjectID. Это, однако, должно быть передано в функцию кодирования в качестве словаря. Порядок не имеет значения, но парам KV должно быть присвоено новое уникальное значение. В этом новом словаре исходные пары KV получат новый строковый ключ, а ObjectID - новое уникальное значение.

Имейте в виду, что я использую Python 2.7.

Выпуск

Обратите внимание, что это вопрос представления словаря (dictA), закодированного значениями ObjectID, в рамках ограничений, которые мне дали

У меня есть словарь, скажем dictA = {'a':'10', 'b':'20', 'c':'30'}, и у меня есть список ObjectIdentifier('n'), где n - это число. Каков наилучший способ создать dictB, чтобы dictB был новым словарем с ключом , равным dictA ' ключ: значение пары и значение равно соответствующему ObjectIdentifier('n') в списке.

Новый dictB должен быть:

{"'a':'10'":ObjectIdentifier('n'), "'b':'20'":ObjectIdentifier('n+1'), "'c':'30'":ObjectIdentifier('n+2')}

Если это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я не знаю, зачем вам это нужно

def ObjectIdentifier(n):
    print(n)
    return "ObjectIdentifier("+ str(n) + ")" 

dictA = {'a':'10', 'b':'20', 'c':'30'}

dictB = {}
for n, key in enumerate(sorted(dictA.keys())):
    dictB[key] = {dictA[key] : ObjectIdentifier(str(n))}

Выход:

{'a': {'10': 'ObjectIdentifier(0)'}, 'b': {'20': 'ObjectIdentifier(1)'}, 'c': {'30': 'ObjectIdentifier(2)'}}
0 голосов
/ 05 июля 2018

Проблема в том, что словари не упорядочены. Так вы говорите

dictA = {'a':'10', 'b':'20', 'c':'30'}

но насколько Python знает, это может быть

dictA = {'c':'30', 'a':'10', 'b':'20'}

Потому что в словарях нет порядка.

Вы можете создать свой диктовку так:

result = {key: ObjectIdentifier(n+pos) for pos, key in enumerate(dictA.items())}

Но нет способа определить, какой ключ попадет в какую позицию, потому что, как я уже сказал, словари не имеют порядка.

Если вы хотите алфавитный порядок, просто используйте sorted()

result = {key: ObjectIdentifier(n+pos) 
    for pos, key in enumerate(sorted(dictA.items()))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...