2010-10-07 3 views
0

У меня есть словарь с следующей структурой:Анализировать ДИКТ из dicts нанизывать

{1: {'message': u'test', 'user': u'user1'}, 2: {'message': u'test2', 'user': u'user2'}}

Я хотел бы создать строку, содержащую значения из внутреннего словаря в таком виде:

string = "<span>test1</span><span>user1</span><br /> 
      <span>test2</span>..." 

Я пробовал все: от dict.keys(), dict.values(), (k,v) for k, v in dict, но я не могу заставить его работать. Каков правильный путь?

+0

Ваш пример показывает ключи, а не значения – Habbie

+2

Я не понимаю, почему вы просто не используете список словарей? Если ключи внешнего словаря только увеличивают число, то вам лучше сделать их список. Также помните, что вам не гарантирован порядок поиска при извлечении 'dict.keys()'. – daveslab

ответ

4
>>> d={1: {'message': u'test', 'user': u'user1'}, 2: {'message': u'test2', 'user': u'user2'}} 

>>> ''.join('<span>%(message)s</span><span>%(user)s</span><br/>' % v for k,v in sorted(d.items())) 
u'<span>test</span><span>user1</span><br/><span>test2</span><span>user2</span><br/>' 
+0

это очень мило;) – Habbie

+1

Лучше повторить сортировку (d.items()), чтобы сохранить правильный порядок. –

+0

@ Хабби: ха-ха, да, я полагаю, так :). @Leonid Швечиков: Хорошая добыча. Я обновил ответ. – sdolan

0

нравится это?

>>> d={1: {'message': u'test', 'user': u'user1'}, 2: {'message': u'test2', 'user': u'user2'}} 
>>> l=[] 
>>> for k,v in d.iteritems(): 
...  l.append('%s%s%s' % ('<span>', '</span><span>'.join(v.values()),'</span>')) 
... 
>>> print '<br/>\n'.join(l) 
<span>test</span><span>user1</span><br/> 
<span>test2</span><span>user2</span> 
1

Как о чем-то вроде этого:

dod = {1: {'message': u'test', 'user': u'user1'}, 2: {'message': u'test2', 'user': u'user2'}} 
string = "" 
for v in dod.values(): 
    string = string + "<span>"+v['message'] + "</span><span>" + v['user'] + "</span><br />\n" 

Или, в гораздо лучшем стиле питона

string = '\n'.join(("<span>"+v['message'] + "</span><span>" + v['user'] + "</span><br />" for v in dod.values())) 

Если вам нужны пользователи сортируют, вы могли бы

ksorted = sort(dod.keys()) 
for k in ksorted: 
    v = dod[k] 
    string = string + "<span>"+v['message'] + "</span><span>" + v['user'] + "</span><br />\n" 
1
data = {1: {'message': u'test', 'user': u'user1'}, 2: {'message': u'test2', 'user': u'user2'}} 
strg = "".join(["<span>%s</span><span>%s</span><br />" % (item['message'], item['user']) for item in x.values()]) 
print strg 
Смежные вопросы