эквивалент присоединения к Python - PullRequest
8 голосов
/ 29 апреля 2011

У меня есть словарь, говорящий ..

dict = {
    'a' : 'b',
    'c' : 'd'
}

В php я бы что-то вроде implode (',', $ dict) и получил вывод 'a, b, c, d'Я делаю это на питоне?

Ответы [ 9 ]

6 голосов
/ 29 апреля 2011

Это кажется самым простым способом:

>>> from itertools import chain
>>> a = dict(a='b', c='d')
>>> ','.join(chain(*a.items()))
'a,b,c,d'
5 голосов
/ 29 апреля 2011

Во-первых, неправильный ответ:

','.join('%s,%s' % i for i in D.iteritems())

Этот ответ неверен, поскольку, хотя ассоциативные массивы в PHP do имеют заданный порядок, словари в Python не .Чтобы компенсировать это, нужно использовать упорядоченный тип отображения (например, OrderedDict) или принудительно указать явный порядок:

','.join('%s,%s' % (k, D[k]) for k in ('a', 'c'))
4 голосов
/ 29 апреля 2011

Использовать строку объединить в плоский список словарных элементов, таких как:

",".join(i for p in dict.items() for i in p)

Кроме того, вы, вероятно, хотите использовать OrderedDict .

2 голосов
/ 29 апреля 2011

Это имеет квадратичную производительность, но если словарь всегда маленький, это может не иметь значения для вас

>>> sum({'a':'b','c':'d'}.items(), ())
('a', 'b', 'c', 'd')

обратите внимание, что dict.items () не сохраняет порядок, поэтому ('c', 'd', 'a', 'b') также будет возможным выводом

1 голос
/ 05 июня 2013

Я знаю, что это старый вопрос, но также полезно отметить.

Оригинальный вопрос вводит в заблуждение. implode () не выравнивает ассоциативный массив в PHP, он объединяет значения

echo implode(",", array("a" => "b", "c" => "d"))
// outputs b,d

implode () будет таким же, как

",".join(dict.values())
# outputs b,d
1 голос
/ 29 апреля 2011

Либо

[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 () вокруг них.Я не правильно прочитал ваш вопрос

1 голос
/ 29 апреля 2011
a=[]
[ a.extend([i,j]) for i,j in dict.items() ]
0 голосов
/ 29 апреля 2011

Это не очень элегантно, но работает:

result=list()
for ind in g:
   result.append(ind)
   for cval in g[ind]:
       result.append(cval)
0 голосов
/ 29 апреля 2011

dictList = dict.items ()

Это вернет список всех элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...