@Nubbin

Передвод кода с php на python?

Доброе утро, я тут перевожу php код в python пожалуйста помогите с одной проблемой.

Вот php код

class Test {
	private $data = [];

	public function unit() 
	{
		foreach ($data as $row) 
		{
			$id = rand();
			$this->data[$data[0]][$data[1]][$data[2]] = [
                'name' => $data[2],
                'id' => $id
            ];
		}


		$this->sortAscAll();
	}

	private function sortAsc($a, $b)
    {
        if ($a['id'] == $b['id']) {
            return 0;
        }
        return ($a['id'] < $b['id']) ? -1 : 1;
    }

	public function sortAscAll() 
	{
		foreach ($this->data as $oneID => $In) 
		{
            foreach ($In as $twoId => $item) {
                uasort($item, [$this, 'sortAsc']);
                $this->data[$oneID][$twoId] = $item;
            }
        }
        return $this;
	}
}


Я частично перевел, но не получается перевести сортировку.

class Test:
    __data = dict()

    def unit(self):
    	self.__data = AutoVivification()

    	for item in read:
    		self.__data[data[0]][data[1]][data[2]] = (
                    'name', data[2],
                    'id', rand
            )

        self.__sortAscAll()

    def __sortAscAll(self):
        for oneID, In in self.__data.items():
            for twoID, item in In.items():
            	# Никак не могу сортировать по ключу id
                sorted(item.items(), key=lambda tuple: print(tuple), reverse=True)
                self.__data[oneID][twoID] = item



class AutoVivification(dict):
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value


Помогите пожалуйста очень нужно, уже 2 день не могу сделать
  • Вопрос задан
  • 335 просмотров
Пригласить эксперта
Ответы на вопрос 1
Если у вас список (list) словарей (dict), то для сортирвки его inplace можно писать так:

list_of_dicts = item.items()
list_of_dicts.sort(key=lambda x: x['id'])


Но меня смущает item.items(). Если эта функция у вас возвращает не сам исходный список, а его копию, то сортировка не поменяет исходный список. Именно поэтому я разделил на две строчки то, что вполне читабельно было бы и в одной строке. Хотя если вы у вас item - стандартный dict, то всё ок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы