2012-02-14 2 views
2

Я имею в виду вопрос: https://stackoverflow.com/a/575889/292291Методы сортировки словаря

  1. Если я использую целые числа в качестве ключа, то появляется я гарантированно отсортированный заказ?

    >>> dict = { 2: "list 2", 0: "list 0", 1: "list 1" } 
    >>> dict 
    {0: 'list 0', 1: 'list 1', 2: 'list 2'} 
    
  2. В sorted(mydict, key=lambda key: mydict[key]), как интерпретировать или читать лямбда? Я не понимаю эту часть, так как я новичок в лямбдах. Что означает key: и mydict[key]?

  3. В sorted(d, key=d.get) что делает d.get обратитесь к? Если я:

    >>> dict.get 
    <built-in method get of dict object at 0x1d27830> 
    

ответ

4

1-Dicts никогда не гарантирует заказ, иногда он может даже выглядеть так, как будто он есть, но набирает там достаточно чисел, и вы увидите, что они этого не делают (это из-за того, что hashes получены для каждой клавиши)

2- Эти два одинаковы:

lambda key: mydict[key] 

def temp_function(key): 
    return mydict[key] 

в принципе, вы создаете временную функцию, которая принимает ключ в качестве параметра, и возвращает mydict [ключ]

3- Второй аргумент отсортированный относится к функции, которая будет вызываться, передавая текущую клавишу dict. Значение, возвращаемое этим, будет использоваться для определения порядка вашего сортированного dict.

+0

Как сказал @wim, если вы хотите заказать диктофон, используйте ** OrderedDict ** –

4
  1. No. Словари упорядочены по хэш их ключей, и нет никакой гарантии, что алгоритм хеширования не будет переключаться между версиями или реализации.

  2. Все между lambda и : является аргументом. Все после : - это возвращаемое выражение.

  3. get метод объекта, связанный с d. В объектах dict он возвращает значение, если ключ существует, иначе переданный по умолчанию или None.

+1

2. Откуда возникает аргумент «ключ»? –

+0

Аргументы могут иметь любые имена, которые вам нравятся. Замена «ключа» на «aswgfawe» не имеет значения, как и для обычных функций. –

3

Прежде всего, пожалуйста, не вызывая переменную dict, потому что вы можете теневые встроенный таким образом.

1) Я так не верю. Если вы хотите отсортировать dict, просто используйте OrderedDict от модуля collections.

2) Вы должны прочитать его как анонимную функцию, которая задала входной аргумент key, вернет объект mydict[key]. Это было бы эквивалентно:

def foo(key): 
    # assume mydict is in scope 
    return mydict[key] 

3) Если предположить, что переменная d здесь является ДИКТ, он будет возвращать список ключей в словаре отсортированного по их соответствующим значения от d. Это означает, что функция d.get() вызывается для любого значения in d при итерации, и список будет отсортирован по возвращаемым значениям d.get, а не по самим объектам.

Смежные вопросы