Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 我的str(float)在直方图字典转换时被破坏,我如何停止?_Python_Dictionary_Histogram - Fatal编程技术网

Python 我的str(float)在直方图字典转换时被破坏,我如何停止?

Python 我的str(float)在直方图字典转换时被破坏,我如何停止?,python,dictionary,histogram,Python,Dictionary,Histogram,当尝试对数字列表(str格式)进行柱状图分析时,我的所有数字都会被分解 比如说 a = ['1','1.5','2.5'] 在运行我的直方图函数之后 我的字典看起来像 {'1': 2, '2': 1, '5': 2, '.': 2} 我的直方图函数是 def histogram(a): d = dict() for c in a: d[c] = d.get(c,0)+1 return d 我正在为学校做一个项目,把所有的东西都编码进去,但是当我开始

当尝试对数字列表(str格式)进行柱状图分析时,我的所有数字都会被分解 比如说

a = ['1','1.5','2.5']
在运行我的直方图函数之后 我的字典看起来像

{'1': 2, '2': 1, '5': 2, '.': 2}
我的直方图函数是

def histogram(a):
    d = dict()
    for c in a:
        d[c] = d.get(c,0)+1

    return d
我正在为学校做一个项目,把所有的东西都编码进去,但是当我开始做模式部分时,我使用的数字不是特别整数,我得到了上面的结果 我如何调整/更改它,使其完全按照键入的字符串接受字符串
Python2.7在Windows 7x64上,在将每个字符串元素传递给直方图函数之前,可以将其转换为浮点

a = ['1','1.5','2.5']

a = [float(i) for i in a]

def histogram(a):
    d = dict()
    for c in a:
        d[c] = d.get(c,0)+1

    return d

print histogram(a)

列表定义中可能有错误。运行你的代码,我得到

{'1': 1, '1.5': 1, '2.5': 1}
如果我将
a
的定义从

a = ['1','1.5','2.5']

我得到了你给我们看的结果


因此,请仔细检查您的列表是如何定义的。

您可以使用以下内容:

>>> a = ['1','1.5','2.5']
>>> dict.fromkeys(a, 0)
{'1': 0, '1.5': 0, '2.5': 0}
现在您可以迭代键来设置相应的值

我使用了下面的听写理解来减少我的工作量

>>> {key: float(key)+1 for key in a}
{'1': 2.0, '1.5': 2.5, '2.5': 3.5}

享受:)

histgram函数按编写时的方式工作。但是,如果您无意中选择了.join()将您的直方图与生成的对象进行直方图列出。例如<代码>t=['1.0'、'2.0'、'2.5']和
s=s.join(t)
s随后将=='1.02.02.5',直方图将小数作为切片中的值进行计数。我的问题是在调用直方图之前放置了一个.join()。
我向任何在这方面浪费时间的人致歉。

Ubuntu12.04上的python 2.7我无法复制问题OSX 10.7无法复制问题。。。在原始代码中是否有额外的循环,使您通过字符串中的每个字符进行循环?。。。因为结果有2x1,1x2,2x5。2x'。。。这是一个正确的“字符串”历史记录mok,让我试试浮点转换,看看会发生什么,我在原版中只有一行。。。t=list(a),但我最终没有使用它,而是删除了它,除了直方图函数保持原样之外,它对我输入的任何列表都有效,无论是str还是int,只是当它们是字符串时它打破了浮点数。好的,再多一点信息,我的程序接受输入,执行函数调用以确保输入是一个数字(根据输入返回int或float),创建一个返回列表,直到完成为止,然后您可以将其设置为平均值、中值或列表模式(每个都是一个单独的函数调用。平均值和中值工作正常,并相应地返回整数或浮点值。当我进入模式时,我的模式函数对列表进行排序,将其转换回str,然后函数调用直方图,这是当我得到损坏的浮点值时。然后它构建一个反向字典,列出键,对新列表进行排序并打印模式。我只在程序中得到损坏的浮点值,而不是当我在shell中运行Stu编写的直方图时。所以基本上我取一个str,将其转换为int或float,列出这些,然后再转换回str,然后再转换为直方图。很抱歉所有这些帖子,在shell中玩过之后,我发现我的问题是什么,它不在直方图中。我的pr当我尝试将int/float列表转换回str时会出现问题。因此,我必须稍微调整我的程序以适应这种情况。我给你的列表不是我的程序实际发送到直方图的列表。它实际上发送了一个字符串int列表。所以,在我重写我的大部分程序之前,有没有简单的方法将它们转换为str没有丢失小数?很高兴你把它整理好了!更新你的问题来描述问题是什么以及你是如何解决的。我忘了向下滚动,没有看到这些帖子。这是我确定的,我的第一个列表是从str转换为float或int(检查长度,然后是int(输入)或float(输入)的输入并返回int或float,然后生成这些的列表。直方图需要str,所以我尝试将列表转换回str,这就是问题发生的时候。a=[str(n)for n in a]将上面的列表返回为['1','1','2']。因此,要么我不需要在列表之前转换,要么找到更好的方法转换回strneverind,我的问题就在某个模糊的地方。join语句我在我的程序中没有注意到。P.S.感谢大家试图帮助我。
>>> {key: float(key)+1 for key in a}
{'1': 2.0, '1.5': 2.5, '2.5': 3.5}