Преобразование словаря для списка? [дубликат]

Я думаю, что это зависит от того, как ресурсы производятся и используются. Если бы 5 объектов работы доступны сразу, и у Вас есть 5 потребительских объектов, имело бы смысл будить все потоки с помощью notifyAll (), таким образом, каждый может обработать 1 объект работы.

, Если Вы имеете в наличии всего один объект работы, какой смысл того, чтобы будить все потребительские объекты мчаться для того одного объекта? Первая проверка доступную работу получит его, и все другие потоки проверят и найдут, что им нечего делать.

я нашел большое объяснение здесь . Короче говоря:

уведомление () метод обычно используется для пулы ресурсов , где существует произвольное число "потребителей" или "рабочих", которые берут ресурсы, но когда ресурс добавляется к пулу, только один из ожидающих потребителей или рабочих может иметь дело с ним. notifyAll () метод на самом деле используется в большинстве других случаев. Строго, это требуется, чтобы уведомлять официантов условия, которое могло позволить нескольким официантам продолжать двигаться. Но это часто трудно знать. Таким образом, как общее правило, , если у Вас нет конкретной логики для использования, уведомляют (), тогда необходимо, вероятно, использовать notifyAll () , потому что часто трудно знать точно, какие потоки будут ожидать на конкретном объекте и почему.

179
задан martineau 29 June 2019 в 08:20
поделиться

6 ответов

Ваша проблема в том, что у вас есть ключ и значение в кавычках превращая их в строки, т.е. вы устанавливаете aKey так, чтобы он содержал строку «ключ» , а не значение переменной ключ . Кроме того, вы не очищаете список temp , поэтому вы добавляете в него каждый раз, вместо того, чтобы просто содержать в нем два элемента.

Чтобы исправить свой код, попробуйте что-то вроде:

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

Вам не нужно копировать переменные цикла , ключ и значение в другую переменную перед их использованием, поэтому я их исключил. Точно так же вам не нужно использовать append для создания списка, вы можете просто указать его в квадратных скобках, как показано выше.

135
ответ дан 23 November 2019 в 06:14
поделиться
dict.items()

Does the trick.

396
ответ дан 23 November 2019 в 06:14
поделиться

Вам следует использовать dict.items () .

Вот решение вашей проблемы с одним лайнером:

[(k,v) for k,v in dict.items()]

и результат:

[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]

или вы можете выполните

l=[]
[l.extend([k,v]) for k,v in dict.items()]

для:

['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
53
ответ дан 23 November 2019 в 06:14
поделиться
 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
 >>> list(reduce(lambda x, y: x + y, a.items()))
 ['foo', 'bar', 'baz', 'quux', 'hello', 'world']

Объяснение: a.items () возвращает список кортежей. При сложении двух кортежей получается один кортеж, содержащий все элементы. Таким образом, сокращение создает один кортеж, содержащий все ключи и значения, а затем список (...) составляет из него список.

33
ответ дан 23 November 2019 в 06:14
поделиться

Probably you just want this:

dictList = dict.items()

Your approach has two problems. For one you use key and value in quotes, which are strings with the letters "key" and "value", not related to the variables of that names. Also you keep adding elements to the "temporary" list and never get rid of old elements that are already in it from previous iterations. Make sure you have a new and empty temp list in each iteration and use the key and value variables:

for key, value in dict.iteritems():
    temp = []
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp)

Also note that this could be written shorter without the temporary variables (and in Python 3 with items() instead of iteritems()):

for key, value in dict.items():
    dictList.append([key, value])
21
ответ дан 23 November 2019 в 06:14
поделиться

Если вы создаете словарь только для того, чтобы составить список кортежей, поскольку создание таких слов, как вы, может быть проблемой, вы можете изучить использование zip ()

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

headers = ['Capital', 'Food', 'Year']
countries = [
    ['London', 'Fish & Chips', '2012'],
    ['Beijing', 'Noodles', '2008'],
]

for olympics in countries:
    print zip(headers, olympics)

дает

[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]

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

5
ответ дан 23 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: