Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача по ссылке? 
:(
    Опции темы
YahоО
Дата 22.7.2023, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Сам написал такую функцию:
Код

def t(a):   
    c={} 
    a['aaaaaa'] = 10000      
    for k, v in sorted(a.items(), key=lambda v:v[1]):c[k]=v
    a=c
    return c
    
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
d=t(a)
print(a)  # ???
print(d)

и мне в ней не понятно как получить ожидаемый и однозначный из нее ответ.
По идее  строки "return c" в ней не должно быть, а ответ предполагается все же получить, т.к. в функцию передается dict, и в общем то такой ответ есть, но он не сортирован как задумано.
И только с помощью "лишней" строки "return c" можно получить то что требуется, т.е. обновленный и сортированный словарь.
Получается что в функции имеется какая то ошибка, а вот в чем причина и как ее исправить?


PM MAIL   Вверх
Oldshelf
Дата 23.7.2023, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 22.4.2018

Репутация: нет
Всего: 4



Похоже,  присвоение a=c внутри функции работает для локальной переменной. Хотя, a - глобальная. Видимо, какая-то ошибка интерпретатора.

Сработал вариант с явным указанием, что a - глобальная переменная:
Код

def t():
 global a
 c={} 
 a['aaaaaa'] = 10000 
 for k, v in sorted(a.items(), key=lambda v:v[1]):c[k]=v
 a=c
 return c
 
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
d=t()
print(a) # ???
print(d)

PM MAIL WWW   Вверх
YahоО
Дата 23.7.2023, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Да, Ваш код работает, спасибо, понял свою ошибку, и переделал:
Код

def t(a): 
    a['aaaaaa'] = 1      
    for k, v in sorted(a.items(), key=lambda v:v[1]):a[k+'_']=v    
    g=set(a.keys())
    for key in g:
        if not '_' in key:
            a.pop(key)
    a.pop('aaaaaa_')
    g=a.keys()
    for key in g:        
        a[key.replace('_','')  ] = a[key]
        a.pop(key)
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
t(a)
print(a)

хотя и максимально некрасиво, но работает как требовалось.

Это сообщение отредактировал(а) YahоО - 23.7.2023, 20:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1017 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.