微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将这个带有表情符号标志的奇怪结构的字符串列表处理成字典?

如何解决如何将这个带有表情符号标志的奇怪结构的字符串列表处理成字典?

想象一下,我们有一个具有定义结构的字符串列表。 解析这样的列表以获取字典的最简单策略是什么?

mylist = [
    '??Zynex 0,6','??PayPal 11','??PetIQ 0,5','??First Solar 0,7','??Upwork 1%','??NV5 Global 0,8','??TPI Composites 1','??Fiserv 0,]

我正在寻找结果:

{
    'Zynex': 0.6,'PayPal': 11.0,'PetIQ': 0.5,'First Solar': 0.7,'Upwork': 1.0,'NV5 Global': 0.8,'TPI Composites': 1.0,'Fiserv': 0.5,}

解决方法

其实很简单:

import re

mylist = [
    '??Zynex 0,6','??PayPal 11','??PetIQ 0,5','??First Solar 0,7','??Upwork 1%','??NV5 Global 0,8','??TPI Composites 1','??Fiserv 0,]

res = {}
for elem in mylist:
    key,val = re.sub(r"[^A-Za-z0-9,]","",elem).rsplit(" ",1)
    res[key] = float(val.replace(",","."))
 
print(res)

输出:

{'Zynex': 0.6,'PayPal': 11.0,'PetIQ': 0.5,'First Solar': 0.7,'Upwork': 1.0,'NV5 Global': 0.8,'TPI Composites': 1.0,'Fiserv': 0.5}

编辑: 根据您的评论,您还想获得标志表情符号的文本表示。一个粗略的解决方案是这样的:

def flag_to_str(emoji):
    return "".join(chr(c - 101) for c in emoji.encode()[3::4])


print(flag_to_str("??"))  # US
print(flag_to_str("??"))  # FI

# How it works:
print("??".encode())  # b'\xf0\x9f\x87\xba\xf0\x9f\x87\xb8'
print("??".encode()[3::4])  # b'\xba\xb8'
print("??".encode()[3::4][0])  # 186
print(chr("??".encode()[3::4][0] - 101))  # U

说明: 大多数标志表情符号被编码为两个 regional indicator symbols 的序列。例如。 ?? 是?+ ?,以十六进制表示为f0 9f 87 ba f0 9f 87 b8 (https://onlineutf8tools.com/convert-utf8-to-hexadecimal?input=??&prefix=false&padding=false&spacing=true)。从那里我们可以看到每个区域符号都以 f0 9f 87 开头,第四个字节是 101₁₀ 添加到等效的 ASCII 大写字符:https://www.asciitable.com。因此 0xba 186₁₀ - 101₁₀ = U

,

我假设结构包含没有空格的数字部分作为字符串的最后一个组件,并且您希望从字符串的前导组件中去除“我们”。

您想要的基本过程是迭代原始列表,在每次传递时执行以下操作:

  1. 将字符串分成键和值部分。
  2. 清除不需要的东西的价值。
  3. 清除不需要的东西的关键。
  4. 将键值对添加到字典中。

类似这样的事情,但我没有处理带有百分比的值:

my_list = ['??Zynex 0,#'??Upwork 1%',5']

##strip the 'us'
my_list = [x[2:] for x in my_list]
print(my_list[0].lstrip('us'))
##create a dictionary
my_dict = {}

## Now iterate over my_list and add key,value pairs to my_dict.
for e in my_list:
   ## make a list of the string,split on whitespace
   e = e.split()
   ## get the final element as value
   value = e[-1]
   ## replace commas with periods in value
   ## and convert to a float.
   value = float(value.replace(',','.'))
   ##join the rest of e into the key part.
   key = ' '.join(e[:-1])
   my_dict[key] = value
,

我希望这段代码能帮到你:

mylist = ['??Zynex 0,5']

edited = []
dicto = {}
for val in mylist:
     new_val = val[2:]
     edited.append(new_val)
for i,val in enumerate(edited):
    tmp = val.rsplit(' ',1)
    dicto[tmp[0]] = tmp[1]
print(dicto)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。