2010-10-07 99 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