2010-10-07 104 views
0

我有以下結構的詞典:解析字典串

{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 2010-10-07 19:07:40

+2

我不明白爲什麼您只是不使用字典列表?如果外部詞典的鍵只是越來越多的數字,那麼你最好把它們作爲一個列表。還要記住,在獲取'dict.keys()'時,不能保證檢索的順序。 – daveslab 2010-10-07 19:08:59

回答

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 2010-10-07 19:16:07

+1

最好迭代排序的(d.items())以保持正確的順序。 – 2010-10-07 20:17:37

+0

@Habbie:哈哈,是的,我想是這樣:)。 @Leonid Shvechikov:很好。我已經更新了答案。 – sdolan 2010-10-08 00:26:20

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