如何搜索字符串的unicode字典

时间:2013-12-02 23:35:56

标签: python unicode encoding dictionary utf-8

在Ubuntu 13.10中使用python 2.7.4我正在通过字符串编码完成我的工作。

我有一个dict部分。这包括一些unicode字符串,例如:

[{'part_number': u'70-0018', 'name': 'Baseball caps', 'slug': u'70-0018', 'link': 'https://URL/index.php?path=info&part_uuid=13840f24-3819-11e2-9e3b-002564adbfd8'}, 
{'part_number': u'80-0002', 'name': 'Top Hats', 'slug': u'80-0002', 'link': 'https://URL/index.php?path=info&part_uuid=9ff5627e-3827-11e2-9e3b-002564adbfd8'}]

我想测试重复的slugs,因为我正在创建dict,并且在碰撞时添加一个修订号以保持唯一性:

for row in from_cur.fetchall():
  n = row[0]
  pt = row[1]
  pn = row[2]
  u = "https://URL/index.php?path=info&part_uuid="+row[3]  
  new_pn = u"%s-%s" %(pt,pn)
  sl = slugify(new_pn)

  if sl in parts:
    for i in range(10):
      new_sl = sl+"-%s" % str(i)
      if new_sl in parts:
        pass
      else:
        sl = new_sl
        break

  part = {"name":"%s" % n,"part_number":"%s" % new_pn, "link":"%s" % u, "slug":"%s" % sl}
  parts.append(part)

我已尝试过“if sl in parts:”行:

sl,unicode(sl),sl.encode('utf-8'),str(sl),sl.decode('ascii'),sl.decode('unicode-escape'),sl.decode( 'UTF-8')

但是没有一个让我进入改变slug字段的if循环。

如何在字典中比较(或搜索)字符串与unicode?

1 个答案:

答案 0 :(得分:1)

你没有显示最初声明parts的位置,但是因为你稍后将dicts附加到它,我假设它是一个dicts列表。你开始时可能是空的。这种列表成员资格测试不起作用。这不是一个Unicode问题,你正在测试一个问题,看一个字符串是否在一个dicts列表中。

最好的解决方案是在你去的时候保持一套用过的slu ::

used_slugs = set()
for row in from_cur.fetchall():
    ...
    if sl in used_slugs:
        # do something to make a new slug
    ...
    used_slugs.add(sl)
    parts.append(part)