Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何规范大数据列表中元素的格式_Python - Fatal编程技术网

Python 如何规范大数据列表中元素的格式

Python 如何规范大数据列表中元素的格式,python,Python,尝试在不使用集合的情况下从以下列表中计算唯一值: ('TOILET','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING') 我需要的输出是: ('TOILET':2,'AIR CONDITIONiNGS':3) 我的代码目前是 for i in Data: if i in number: number[i] += 1 else: number[i] = 1 pr

尝试在不使用集合的情况下从以下列表中计算唯一值:

('TOILET','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING')
我需要的输出是:

('TOILET':2,'AIR CONDITIONiNGS':3)
我的代码目前是

for i in Data:
    if i in number:
        number[i] += 1
    else:
        number[i] = 1
print number
有可能得到输出吗

original = ('TOILETS', 'TOILETS', 'AIR CONDITIONING', 
            'AIR-CONDITIONINGS', 'AIR-CONDITIONING')
a_set = set(original)
result_dict = {element: original.count(element) for element in a_set}
首先,从原始列表(或元组)生成一个集合,将提供其中的所有值,但不会重复

然后,使用
count()
方法,创建一个字典,其中包含来自该集合的键以及在原始列表(或元组)中出现的值

首先,从原始列表(或元组)生成一个集合,将提供其中的所有值,但不会重复

然后使用
count()
方法创建一个字典,其中包含来自该集合的键以及在原始列表(或元组)中出现的值。

您可以尝试以下操作:

import re
data = ('TOILETS','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING')
new_data = [re.sub("\W+", ' ', i) for i in data]
print new_data
final_data = {}
for i in new_data:
   s = [b for b in final_data if i.startswith(b)]
   if s:
      new_data = s[0]
      final_data[new_data] += 1
   else:
      final_data[i] = 1

print final_data
输出:

{'TOILETS': 2, 'AIR CONDITIONING': 3}
您可以尝试以下方法:

import re
data = ('TOILETS','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING')
new_data = [re.sub("\W+", ' ', i) for i in data]
print new_data
final_data = {}
for i in new_data:
   s = [b for b in final_data if i.startswith(b)]
   if s:
      new_data = s[0]
      final_data[new_data] += 1
   else:
      final_data[i] = 1

print final_data
输出:

{'TOILETS': 2, 'AIR CONDITIONING': 3}

我不相信python列表有一种简单的内置方式来完成您的要求。但是,它确实有一个count方法,可以告诉您列表中有多少特定元素。例如:

some_list = ['a', 'a', 'b', 'c']
some_list.count('a')  #=> 2
通常,获取所需内容的方法是利用hash::get(key,default)方法构造一个可递增的哈希:


我不相信python列表有一种简单的内置方式来完成您的要求。但是,它确实有一个count方法,可以告诉您列表中有多少特定元素。例如:

some_list = ['a', 'a', 'b', 'c']
some_list.count('a')  #=> 2
通常,获取所需内容的方法是利用hash::get(key,default)方法构造一个可递增的哈希:

您可以使用此代码,但与Jon Clements的谈话相同,厕所和厕所不是同一个字符串,您必须确保它们

您可以使用此代码,但与Jon Clements的谈话相同,厕所和厕所不是同一个字符串,您必须确保它们

用于帮助确定唯一性

import difflib
a = ('TOILET','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING')
d = {}
for word in a:
    similar = difflib.get_close_matches(word, d.keys(), cutoff = 0.6, n = 1)
    #print(similar)
    if similar:
        d[similar[0]] += 1
    else:
        d[word] = 1

字典中的实际关键字将取决于列表中单词的顺序

difflib.get\u close\u matches
使用
difflib.SequenceMatcher
计算单词与所有可能性的接近度(比率),即使第一个可能性很接近-然后按比率排序。这样做的好处是可以找到比截止点大的最近关键点。但随着词典的发展,搜索将花费更长的时间

如果需要,您可以先对列表进行排序,使相似的单词按顺序出现,然后执行类似的操作(惰性评估)——选择一个适当大的截止值,从而进行一些优化

import difflib, collections
z = collections.OrderedDict()
a = sorted(a)
cutoff = 0.6
for word in a:
    for key in z.keys():
        if difflib.SequenceMatcher(None, word, key).ratio() > cutoff:
            z[key] += 1
            break
    else:
        z[word] = 1

结果:

>>> d
{'TOILET': 2, 'AIR CONDITIONING': 3}
>>> z
OrderedDict([('AIR CONDITIONING', 3), ('TOILET', 2)])
>>> 

我想有一些python软件包可以做这类事情,并且可以进行优化。

使用来帮助确定唯一性

import difflib
a = ('TOILET','TOILETS','AIR CONDITIONING','AIR-CONDITIONINGS','AIR-CONDITIONING')
d = {}
for word in a:
    similar = difflib.get_close_matches(word, d.keys(), cutoff = 0.6, n = 1)
    #print(similar)
    if similar:
        d[similar[0]] += 1
    else:
        d[word] = 1

字典中的实际关键字将取决于列表中单词的顺序

difflib.get\u close\u matches
使用
difflib.SequenceMatcher
计算单词与所有可能性的接近度(比率),即使第一个可能性很接近-然后按比率排序。这样做的好处是可以找到比截止点大的最近关键点。但随着词典的发展,搜索将花费更长的时间

如果需要,您可以先对列表进行排序,使相似的单词按顺序出现,然后执行类似的操作(惰性评估)——选择一个适当大的截止值,从而进行一些优化

import difflib, collections
z = collections.OrderedDict()
a = sorted(a)
cutoff = 0.6
for word in a:
    for key in z.keys():
        if difflib.SequenceMatcher(None, word, key).ratio() > cutoff:
            z[key] += 1
            break
    else:
        z[word] = 1

结果:

>>> d
{'TOILET': 2, 'AIR CONDITIONING': 3}
>>> z
OrderedDict([('AIR CONDITIONING', 3), ('TOILET', 2)])
>>> 


我想有一些python包可以做这类事情,并且可能会进行优化。

假设
number
是循环之前的字典,这应该很好。。。您期望的输出语法无效。。。什么不起作用/你得到了什么?(另外,您的
tuple
示例也不是有效的语法-而且您的
i
在预期结果中已变成小写形式…)使用我的当前代码,其结果将是('rooster':1,'roosts':1,'AIR-conditions':1,'AIR-conditions':1,'AIR-conditions':1)这是意料之中的——厕所和厕所不是一根绳子,空调和空调也不是一根绳子。。。你的问题不在于计算数据的频率-你需要首先以某种方式标准化你的数据…@游戏。那么,您试图计算的并不是唯一的元素。你必须极其详细地解释在这种情况下,两个项目相同意味着什么。哦,是的,标准化数据,有没有办法处理大数据?假设
number
是循环之前的字典,那就好了。。。您期望的输出语法无效。。。什么不起作用/你得到了什么?(另外,您的
tuple
示例也不是有效的语法-而且您的
i
在预期结果中已变成小写形式…)使用我的当前代码,其结果将是('rooster':1,'roosts':1,'AIR-conditions':1,'AIR-conditions':1,'AIR-conditions':1)这是意料之中的——厕所和厕所不是一根绳子,空调和空调也不是一根绳子。。。你的问题不在于计算数据的频率-你需要首先以某种方式标准化你的数据…@游戏。那么,您试图计算的并不是唯一的元素。你必须非常详细地解释在这种情况下,两个项目相同意味着什么。哦,是的,标准化数据,有什么办法处理大数据吗?你正在建立一个列表,检查它是否为空,然后再次建立列表,以获取第一个元素。。。嗯?好吧。。。现在尝试使用
data=('T'、'loosts'、'loosts'、'AIR-conditions'、'AIR-CONDITIONINGS'、'AIR-conditions')
…也许。。。虽然OP需要计算出i.startswith(b)在给定数据的情况下,对于他们的目的应该是什么,
,但您正在构建一个列表以检查它是否为空,然后再次构建列表以获取第一个元素。。。嗯?好吧。。。现在尝试使用
data=('T'