Из того, что я прочитал, словари «неупорядочены», поэтому найти ключ и его значения на основе позиции невозможно. Есть ли другой способ сделать это и вернуть тот же словарь без ключа и значения ключа на основе выбранной позиции. Я хочу установить переменную в положение ключа, чтобы пользователь мог выбрать, какой ключ удалить вместе со значениями этих ключей (может быть двойное увеличение имен и значений ключей). Ключи и значения в этом словаре являются строками, а не целыми числами и меняются каждый раз, когда я запускаю скрипт, так как две строки, которые я объединяю, различаются в зависимости от ввода пользователя.

Пример для отработки: получение = {'говядина': 'мята', 'говядина': 'чипсы', 'курица': 'чипсы'}

-2
O.Sam 29 Авг 2017 в 07:59

3 ответа

Лучший ответ

Как убрать ключ по позиции

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

def remove_key(d, i):
    'Mutate the dictionary to remove i-th key'
    keys = d.keys()
    del d[keys[i]]
    return d

Особый случай для "двойных ударов"

Если ваши данные дублируются, словарь удалит дубликаты, прежде чем вы сможете получить пары. Таким образом, данные должны храниться как список пар ключ / значение, а не как словарь. Это также позволит вам напрямую удалять по позиции:

>>> receipt = [('beef', 'mint'), ('beef', 'chips'), ('chicken', 'chips')]
>>> del receipt[1]
>>> receipt
[('beef', 'mint'), ('chicken', 'chips')]
1
Raymond Hettinger 29 Авг 2017 в 05:07

Что вы можете сделать, это отсортировать ключи и использовать индекс ключа в этом списке, чтобы удалить ключ, значение из dict. Смотрите ниже случай. Импровизировать для использования в вашей программе.

mydict = {'c':'qwe','a':'asd','b':'acb'}
for key in sorted(mydict.keys()):
    print(key,":",mydict[key])

Это напечатает

a:asd
b:acb
c:qwe
0
Abhijeetk431 29 Авг 2017 в 06:22

То, что вы считаете словарем: receipt = {'beef': 'mint', 'beef':'chips', 'chicken':'chips'} не является словарем, так как словари не могут иметь несколько значений с одним и тем же ключом.

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

-1
Honza Zíka 29 Авг 2017 в 05:07