社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Mark Meyer

Mark Meyer 最近创建的主题
Mark Meyer 最近回复了
5 年前
回复了 Mark Meyer 创建的主题 » Python:创建一个字典,其中键有多个值

你可以用 setdefault()

L=[('a','111'),('b','222'),('a','333'),('b','444')]

d = {}
for key, value in L:
    d.setdefault(key, []).append(value)

print(d)
# {'a': ['111', '333'], 'b': ['222', '444']}
5 年前
回复了 Mark Meyer 创建的主题 » Python:将二进制字符串转换为文本文件

你需要一些识别字符边界的方法。如果将其限制为设置的位长度(如仅8位),则可以填充二进制文件,然后就可以知道字符大小。如果你不想这样做,你需要别的办法。

这里有一个方法,它不关心处理空格、emojis等的输入。它是通过用空格分隔二进制文件中的字符来实现的:

test_str = "Dies ist eine binäre Übersetzung. 🐻"

Binary = ' '.join(format(ord(i), 'b') for i in test_str)   

print("original:")
print(test_str)

print("\nThe string after Binary conversion : \n" + Binary)

text = "".join(chr(int(s, 2)) for s in  Binary.split())
print(f'\nString after conversion back to text:\n{text}')

这张照片:

原件:
死在一个垃圾桶里。

二进制转换后的字符串:
1000100 1101001 1100101 1110011 100000 1101001 1110011 1110100 100000 1100101 1101001 1101110 1100101 100000 1100010 1101001 1101110 11100100 1110010 1100101 100000 1110101 1101110 1100111 101110 100000 11111 01000011011

转换回文本后的字符串:
死在一个垃圾桶里。

注意emoji的最后一个字符以及二进制文件的长度。可能是bear emoji或几个ascii字符。没有分隔符,现在就有办法知道了。

5 年前
回复了 Mark Meyer 创建的主题 » 第一次出现在Python中的重复字符

像这样做的一种蟒蛇式的方法是 zip() (1, 2), (2, 3) ... 然后返回第一个值,其中两个值都是相等的,并且都是字母数字。

next() 获取一个可选参数,用于在没有剩余内容时返回什么内容,在这里可以传递给 -1 isalnum() 可用于测试的字符串是字母数字的:

def firstRepeatedChar(s):
    return next((j for j, i in zip(s, s[1:]) if j == i and j.isalnum()), -1)

firstRepeatedChar("..12345678910111213141516171820212223")
# 1
firstRepeatedChar("^^cmmit^^")
# 'm'
firstRepeatedChar("^^cmit^^")
# -1
5 年前
回复了 Mark Meyer 创建的主题 » 如何将以下Python字符串拆分为字符串列表?

你可以用 re.split() 拆开你的绳子 ( ) . 您可以捕获regex中的分隔符,以便在最终输出中包含它们。结合 str.strip()

import re

s = 'Predicate ( big ,small )'
[s.strip() for s in  re.split(r'([\(\),])', s.strip()) if s]
# ['Predicate', '(', 'big', ',', 'small', ')']
5 年前
回复了 Mark Meyer 创建的主题 » python对象的自定义过滤函数

既然你在考虑一套,我想原来的顺序并不重要。如果是这样,一个选项是添加 __lt__ 方法,以便可以按分数比较对象。然后按相反的顺序对元组进行排序,按整数分组,并从每个组中获取第一个项。在代码中比解释更容易看到:

from itertools import groupby

class myObject:
    def __init__(self, score):
        self.score = score
    def __repr__(self):
        return f'<Object {self.score}>'
    def __lt__(self, other):
        return self.score < other.score

pairs = [(1, myObject(1)), (1, myObject(1)), (3, myObject(7)), (9, myObject(3)), (9, myObject(4))]

[next(v) for k, v in groupby(sorted(pairs, reverse=True), key=lambda x: x[0])]

结果

[(9, <Object 4>), (3, <Object 7>), (1, <Object 1>)]
5 年前
回复了 Mark Meyer 创建的主题 » 如何根据python中的数字列表生成数量?

我认为这是一个生成器,可以根据需要生成扁平化的值。类似于:

list1=[2,1,3]

def expandIndices(l):
    for i, n in enumerate(l,1):
        yield from [i] * n

list(expandIndices(list1))
# [1, 1, 2, 3, 3, 3]
5 年前
回复了 Mark Meyer 创建的主题 » 在Python中读取协议缓冲文件

Protobuffer是一种二进制格式,因此在原始状态下是不可读的。要读它,去拿 python bindings from Google 安装时使用:

pip install --upgrade gtfs-realtime-bindings

from google.transit import gtfs_realtime_pb2
import urllib.request 

feed = gtfs_realtime_pb2.FeedMessage()
pb_url = "http://someURL/someFile.pb"

with urllib.request.urlopen(pb_url) as response:
    feed.ParseFromString(response.read())
    print(feed)

这会给你类似的东西:

header {
  gtfs_realtime_version: "1.0"
  incrementality: FULL_DATASET
  timestamp: 1579313685
}
entity {
  id: "10-abc-O-1"
  trip_update {
    trip {
      trip_id: "10-1622-O-1"
    }
...
5 年前
回复了 Mark Meyer 创建的主题 » Python:转换深度嵌套字典或数组中的类型

我认为如果将转换放在开头,允许递归调用传递 ObjectId 并将转换后的字符串直接与函数一起返回,而不是尝试在函数的循环内进行转换。然后您可以将该值传递到递归中,并将字符串取回。

类似于:

from datetime import datetime

def clean_dict_helper(d):
    if isinstance(d, ObjectId) or isinstance(d, datetime):
        return str(d)

    if isinstance(d, list):  # For those db functions which return list
        return [clean_dict_helper(x) for x in d]

    if isinstance(d, dict):
        for k, v in d.items():
            d.update({k: clean_dict_helper(v)})

    # return anything else, like a string or number
    return d

打电话:

clean_dict_helper({
    1: {
        1: ObjectId('5e0e83a6d0fbe7238c960ea0'),
        2: [ObjectId('5e0e83a6d0fbe7238c960ea0'), ObjectId('5e0e83a6d0fbe7238c960ea0')],
        3: datetime(2020, 1, 1),
        4: [{1: ObjectId('5e0e83a6d0fbe7238c960ea0')}],
        5: 'test'
    },
    2: [ObjectId('5e0e83a6d0fbe7238c960ea0'), ObjectId('5e0e83a6d0fbe7238c960ea0')]
})

然后将返回:

{1: {1: '5e0e83a6d0fbe7238c960ea0',
  2: ['5e0e83a6d0fbe7238c960ea0', '5e0e83a6d0fbe7238c960ea0'],
  3: '2020-01-01 00:00:00',
  4: [{1: '5e0e83a6d0fbe7238c960ea0'}],
  5: 'test'},
 2: ['5e0e83a6d0fbe7238c960ea0', '5e0e83a6d0fbe7238c960ea0']}

另外,由于您正在创建一个具有理解力的新列表,因此返回一个新的dict可能是有意义的,而不是用如下内容对传入值进行变异:

    if isinstance(d, dict):
        return {k:clean_dict_helper(v) for k, v in d.items() }
6 年前
回复了 Mark Meyer 创建的主题 » 用于在值小于输入值时打印库存的python字典

您需要返回一个列表,以便可以从定义一个列表开始。类似于:

low_inv = []

在你的圈子里 append() 如果库存不足,则该列表的键(在本例中是计算机的名称)。然后返回:

d = {"MS Surface":47, "HP Laptop Probook":144, "MacBook Pro":23, "Dell Laptop XPS": 10, "Asus Chromebook": 20}

def total_items(laptop_dict, threshold):
    low_inv = []                           # new list
    for akey in laptop_dict.keys():
        if laptop_dict[akey] < threshold:
            low_inv.append(akey)           # append to it
    return low_inv                         # return it

total_items(d,47)

#['MacBook Pro', 'Dell Laptop XPS', 'Asus Chromebook']

这也可以作为 list comprehension ,它将一次性创建一个列表,而不使用显式循环:

def total_items(laptop_dict, threshold):
    return [akey for akey, inv in laptop_dict.items() if inv < threshold]
6 年前
回复了 Mark Meyer 创建的主题 » 如何在python中对相似序列进行分组?[副本]

我想 itertool.groupby

from itertools import groupby

inp = ['a','a', 'i', 'e', 'e', 'e', 'i', 'i', 'a', 'a'] 

output = [list(g) for k,g in groupby(inp)]
print(output)

印刷品

[['a', 'a'], ['i'], ['e', 'e', 'e'], ['i', 'i'], ['a', 'a']]

def group_seq(listA):
    prev = None
    cur = None
    ret = []

    for l in listA:
        if l == prev:    # assumes list doesn't contain None
            cur.append(l)
        else:
            cur = [l]
            ret.append(cur)
        prev = l

    return ret  
6 年前
回复了 Mark Meyer 创建的主题 » 如何在python中每x次迭代直到无穷大?

你不需要一直增加 i 你只需要一遍又一遍地数到7。所以重新设置 当它击中你的计数时归零。那么你就不需要除法也不需要大量:

i = 0
while true:     
    # Do some other stuff first.
    # Check if this iteration is after 7.
    i += 1
    if i == 7:
        print('Factor of 7')
        i = 0 # reset

如果你使用 re.sub() match itertools.count()

import re
from itertools import count

button_number_count = 1;
htmlString = "this is sometext with more sometext and yet another sometext"

counter = count(button_number_count)

// replace sometext with sometext1, sometext2...
new_string = re.sub(r'sometext', lambda x: x.group(0) + str(next(counter)), htmlString )

'this is sometext1 with more sometext2 and yet another sometext3'