【问题标题】:Algorithm Misra & Gries implementation in pythonpython中的算法Misra和Gries实现
【发布时间】:2019-01-14 14:43:11
【问题描述】:

我有这个伪代码:

A = empty associative array;
// Processing
while ( not end of sequence ) #referente ao data stream
     j = current_token();
     if ( j in keys(A) ) then A[ j ] = A[ j ] + 1;
     else if ( | keys(A) | < ( k – 1 ) ) then A[ j ] = 1;
     else for each i in keys(A) do
         A[ i ] = A[ i ] – 1;
         if ( A[ i ] == 0 ) then remove i from A;
// Output
if( a in keys(A) ) then freq_estimate = A[ a ];
else freq_estimate = 0;

我是这样实现的:

def contMisraGries(dataClean, k):
    frequencia_MisraGries = {}
    A={}

    for caracter in dataClean:
        if  caracter in A.keys():
            A = increment(caracter, A)
        else:
            if A.keys() < k-1:
                A.keys(caracter) = 1
            else:
                for i , v in A.items():
                    A.keys(i) -= 1
                    if v == 0:
                        del A.items(i)

    for car, val in A.items() :
        if car in frequencia_MisraGries.keys():
            frequencia_MisraGries.keys(car) = frequencia_MisraGries.values(val) 
        else:
            frequencia_MisraGries.keys(car) = 0

    return frequencia_MisraGries

def increment(caracter, A):
    for k, v in A.items():
        if k == caracter:
            A[k]=A[v]+1

    return A

数据清理是一个列表,像这样:

['o','n','c','e','y','o',...]

k 的值是从用户传递给程序的。

但代码无法编译。我在这一行有错误A.keys(caracter) = 1。 如果我以正确的方式获取代码,我不会这样做。

【问题讨论】:

    标签: python algorithm pseudocode


    【解决方案1】:

    您似乎正在尝试使用键访问字典的内容。但是请注意,keys() 方法不带任何参数,与 documentation 一样,它的作用是:

    此方法返回字典中所有可用键的列表。

    如果您想使用字典的键访问字典的内容,请执行A[caracter]

    示例

    d = {'a':3, 'b':4}
    

    使用keys方法:

    d.keys()
    dict_keys(['a', 'b'])
    

    现在,您尝试执行的操作将引发错误:

    d.keys('a')
    

    TypeError: keys() 不带参数(给定 1 个)

    改为:

    d['a']
    3
    

    在所附链接中了解更多关于Accessing Values in Dictionary 的信息。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多