Convert every dictionary value to utf-8 (dictionary comprehension?)

前端 未结 6 1808
旧巷少年郎
旧巷少年郎 2020-12-31 12:17

I have a dictionary and I want to convert every value to utf-8. This works, but is there a \"more pythonic\" way?

            for key in row.keys():
                


        
相关标签:
6条回答
  • 2020-12-31 12:33

    Use a dictionary comprehension. It looks like you're starting with a dictionary so:

     mydict = {k: unicode(v).encode("utf-8") for k,v in mydict.iteritems()}
    

    The example for dictionary comprehensions is near the end of the block in the link.

    0 讨论(0)
  • 2020-12-31 12:35

    You can just iterate through the keys if you wanted to:

    {x:unicode(a[x]).encode("utf-8") for x in a.keys()}
    
    0 讨论(0)
  • 2020-12-31 12:37

    It depends why you're implicitly encoding to UTF-8. If it's because you're writing to a file, the pythonic way is to leave your strings as Unicode and encode on output:

    with io.open("myfile.txt", "w", encoding="UTF-8") as my_file:
        for (key, values) in row.items():
            my_string = u"{key}: {value}".format(key=key, value=value)
            my_file.write(my_string)
    
    0 讨论(0)
  • 2020-12-31 12:37

    Best approach to convert non-ascii dictionary value in ascii characters is

    mydict = {k: unicode(v, errors='ignore').encode('ascii','ignore') for k,v in mydict.iteritems()} 
    

    Best approach to convert non-utf-8 dictionary value in utf-8 characters is

    mydict = {k: unicode(v, errors='ignore').encode('utf-8','ignore') for k,v in mydict.iteritems()}
    

    For more reference read python unicode documentation

    0 讨论(0)
  • 2020-12-31 12:43

    Python 3 version building on that one answer by That1Guy.

    {k: str(v).encode("utf-8") for k,v in mydict.items()}
    
    0 讨论(0)
  • 2020-12-31 12:43

    As I had this problem as well, I built a very simple function that allows any dict to be decoded in utf-8 (The problem with the current answer is that it applies only for simple dict).

    If it can help anyone, it is great, here is the function :

    def utfy_dict(dic):
        if isinstance(dic,unicode):
            return(dic.encode("utf-8"))
        elif isinstance(dic,dict):
            for key in dic:
                dic[key] = utfy_dict(dic[key])
            return(dic)
        elif isinstance(dic,list):
            new_l = []
            for e in dic:
                new_l.append(utfy_dict(e))
            return(new_l)
        else:
            return(dic)
    
    0 讨论(0)
提交回复
热议问题