#python #join
#python #Присоединиться
Вопрос:
У меня есть слова из словаря..
dict = {
'a' : 'b',
'c' : 'd'
}
В php я бы использовал что-то вроде implode ( ‘,’, $ dict ) и получал выходные данные ‘a, b, c, d’
Как мне это сделать в python?
Комментарии:
1. Словари в Python неупорядочены. Просто подумал, что вы захотите знать.
2. И для протокола, я не понимаю отрицательных голосов. Это законный вопрос с интересным ответом.
3. @Ignacio — Мне тоже интересно. Моей мотивацией для ответа ниже было желание ответить на вопрос. Я бы понял отрицательные голоса, если бы мой (идентифицированный как неэлегантный) ответ был неправильным. вздох
Ответ №1:
Кажется, это самый простой способ:
>>> from itertools import chain
>>> a = dict(a='b', c='d')
>>> ','.join(chain(*a.items()))
'a,b,c,d'
Комментарии:
1. вам не нужен list () там
2. чтобы избежать создания промежуточных списков:
','.join(chain.from_iterable(a.iteritems()))
Ответ №2:
Во-первых, неправильный ответ:
','.join('%s,%s' % i for i in D.iteritems())
Этот ответ неверен, потому что, в то время как ассоциативные массивы в PHP действительно имеют заданный порядок, словари в Python не имеют. Способ компенсировать это — либо использовать упорядоченный тип отображения (например, OrderedDict
), либо принудительно задать явный порядок:
','.join('%s,%s' % (k, D[k]) for k in ('a', 'c'))
Ответ №3:
Используйте строковое соединение в сжатом списке элементов словаря, подобном этому:
",".join(i for p in dict.items() for i in p)
Кроме того, вы, вероятно, захотите использовать OrderedDict .
Ответ №4:
Это имеет квадратичную производительность, но если словарь всегда маленький, это может не иметь значения для вас
>>> sum({'a':'b','c':'d'}.items(), ())
('a', 'b', 'c', 'd')
обратите внимание, что dict.items() не сохраняет порядок, поэтому (‘c’, ‘d’, ‘a’, ‘b’) также было бы возможным результатом
Ответ №5:
a=[]
[ a.extend([i,j]) for i,j in dict.items() ]
Ответ №6:
Либо
[value for pair in {"a": "b", "c" : "d"}.iteritems() for value in pair]
или
(lambda mydict: [value for pair in mydict.iteritems() for value in pair])({"a": "b", "c" : "d"})
Объяснение:
Упрощенный этот пример возвращает каждое значение из каждой пары в mydict
Редактировать: Также поместите «,».join() вокруг них. Я неправильно прочитал ваш вопрос
Ответ №7:
Я знаю, что это старый вопрос, но это также полезно отметить.
Исходный вопрос вводит в заблуждение. implode() не выравнивает ассоциативный массив в PHP, он объединяет значения
echo implode(",", array("a" => "b", "c" => "d"))
// outputs b,d
implode() будет таким же, как
",".join(dict.values())
# outputs b,d
Ответ №8:
Это не очень элегантно, но работает:
result=list()
for ind in g:
result.append(ind)
for cval in g[ind]:
result.append(cval)
Ответ №9:
dictList = dict.items()
Это вернет список всех элементов.
Комментарии:
1. это вернет пары значений (кортежи или что-то еще)