小编mar*_*lon的帖子

如何根据列表中的相同设置值对列表列表进行排序?

a = [['a', 'b'], ['b'], ['b', 'a']]
Run Code Online (Sandbox Code Playgroud)

因为第一个和第三个元素是相同的,如果将它们转换为集合,我想对列表 'a' 进行排序,以便具有相同集合值的任何两个元素彼此相邻。对于上面的示例,排序结果将是:

a = [['a', 'b'], ['b', 'a'], ['b']]
Run Code Online (Sandbox Code Playgroud)

或者

a = [['b'], ['a', 'b'], ['b', 'a']]
Run Code Online (Sandbox Code Playgroud)

python sorting list set

3
推荐指数
1
解决办法
45
查看次数

在 Python 中打开文件读取时应该使用 utf8 还是 utf-8-sig?

我一直使用“utf8”来读取文件:

 with open(filename, 'r', encoding='utf8') as f, open(filename2, 'r', encoding='utf8') as f2:
      for line in f:
          line = line.strip()
          columns = line.split(' ')
       for line in f2:
          line = line.strip()
          columns = line.split(' ')
Run Code Online (Sandbox Code Playgroud)

然而,上面的代码在 for 'f2' 行引入了额外的 '\ufeff' 代码:

columns = line.split(' ')
Run Code Online (Sandbox Code Playgroud)

现在 columns[0] 包含这个字符,而 'line' 没有这个字符。这是为什么?然后我切换到“utf-8-sig”,问题就消失了。

但是,读取“f”和“列”的第一个文件根本不存在此问题,即使仅使用“encoding=utf8”也是如此。两者都是纯文本文件。

所以我有两个问题:

  1. 我正在使用 Python3,在读取文件时,我应该始终使用“utf-8-sig”以确保安全吗?
  2. 为什么“行”不包含此附加代码,但“列”包含它?

python utf-8 python-3.x

2
推荐指数
1
解决办法
1654
查看次数

python dict 搜索键很慢吗?

在下面的代码中,rel_column 是一个字符串,'id_map' 是一个 python 字典,它有 220 万个键值对。

if rel_column in id_map:
   node_ids = id_map[rel_column]
Run Code Online (Sandbox Code Playgroud)

在调试速度瓶颈问题时,我的同事说这段代码是导致缓慢的原因。他说“if”语句需要 log(n) 时间,但我的印象是,在映射或集合中搜索键时,复杂度是常数时间 O(1)。考虑到字典的总大小只有220万个,这不应该是速度瓶颈。

我很困惑。我的同事说得对吗?

python dictionary

2
推荐指数
1
解决办法
3381
查看次数

有没有更好的方法来合并两个集合字典?

我正在使用此代码将一个字典合并到另一个字典中 - 如果存在键,它应该合并两个字典中的值:

source_dict = defaultdict(set)
target_dict = defaultdict(set)

def merge_dict(source_dict, target_dict):
    for source_key in source_dict:
        if source_key in target_dict:
            target_dict[source_key].update(source_dict[source_key])
        else:
            target_dict[source_key] = source_dict[source_key]
Run Code Online (Sandbox Code Playgroud)

有没有办法优化merge_dict上面的功能?例如,使其更简洁或更高效?

python dictionary defaultdict

2
推荐指数
1
解决办法
112
查看次数

在 JSF h:link 中传递参数

在搜索框中,用户输入一个词,如“iPhone”,点击“搜索”,系统进行后台搜索,返回“iPhone”的所有信息。最后还通过wordController.related变量输出一个相关的词“iPod”。如果用户点击“iPod”链接,系统需要将iPod作为另一个词进行搜索,并再次返回结果。我的问题是,如何将“iPod”(“相关”变量)作为另一个搜索变量传递并执行后端搜索?这一次,它不是通过 h:inputText 和 h:commandButton,因为它不是用户输入的值。

感谢您的帮助!

<h:form id="wordForm">
        <h:panelGrid columns="3">
            <h:outputLabel for="word">Enter a word:</h:outputLabel>
            <h:inputText id="word"
                value="#{wordController.word}" />
            <h:message for="word" />
        </h:panelGrid>
        <h:commandButton id="search" value="Search!"
            action="#{wordController.info}" />
    </h:form>
    <br />
    <h:outputText value="#{wordController.wordInfo}"
        rendered="#{not empty wordController.wordInfo}" />

    <h:link value="#{wordController.related}" />
Run Code Online (Sandbox Code Playgroud)

jsf

1
推荐指数
1
解决办法
7327
查看次数

有没有更好的方法将 dict 转换为由逗号分隔的字符串?

例如:

d = {'a':'1', 'b':'2', 'c':'3'}
Run Code Online (Sandbox Code Playgroud)

我想将 ds 作为 str 获取:

ds = 'a:1, b:2, c:3'
Run Code Online (Sandbox Code Playgroud)

我的转换功能:

 def convert_dict(my_dict):
        converted = ''
        for key, value in my_dict.items():
            converted += key + ':' + value + '?'
        return converted[0:-1]
Run Code Online (Sandbox Code Playgroud)

我怀疑应该有更好更简单的方法来做到这一点。

python

1
推荐指数
1
解决办法
40
查看次数

如何从 OrderedDict 获取子集?

我在 Python 中有一个 OrderedDict,我只想获得第一个键值对。如何获得?例如,要获取前 4 个元素,我执行了以下操作:

subdict = {}

for index, pair in enumerate(my_ordered_dict.items()):
    if index < 4:
       subdict[pair[0]] = pair[1]
Run Code Online (Sandbox Code Playgroud)

这是这样做的好方法吗?

python

1
推荐指数
1
解决办法
38
查看次数

如何使用一行代码将字典转换为字符串?

d = {1:'a', 2:'b'}

#s = '1|a;2|b'

s = ';'.join([str(k)+'|'+d[k] for k in d])
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来进行这种转换?

python

1
推荐指数
1
解决办法
113
查看次数

如何从排序字典中获取前 n 个项目?

我有一个带有单词和频率的排序字典:

words = {'dog':8, 'cat':7, 'pig':4 ......}
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方式来选择前 3 个项目?所以它最终是:

words = {'dog':8, 'cat':7, 'pig':4}
Run Code Online (Sandbox Code Playgroud)

我可以设置阈值 k = 3 并执行 for 循环,但是有没有更好的方法来做到这一点?

python

0
推荐指数
2
解决办法
89
查看次数

我可以用一行代码简化这个 for 循环吗?

my_dict = {'a':'1', 'b':2, 'c':3}
my_list = ['a','b','d']
            
for element in my_list:
  if element not in my_dict:
     my_dict[element] =1
Run Code Online (Sandbox Code Playgroud)

这个for循环可以用Python中的一行代码代替吗?我无法使用字典或列表理解来做到这一点。

python

-2
推荐指数
1
解决办法
62
查看次数

为什么我必须使用全局变量来导入变量?

import datetime
from datetime import date

def get_one_week():
    global date
    seven_dates = []
    date = date.today()
    for i in range(7):
        date += datetime.timedelta(days=-1)
        date_str = date.strftime('%Y%m%d')
        seven_dates.append(date_str)
    return seven_dates

print(get_one_week())
Run Code Online (Sandbox Code Playgroud)

这将打印出:

['20220901', '20220831', '20220830', '20220829', '20220828', '20220827', '20220826']
Run Code Online (Sandbox Code Playgroud)

我的问题是,“日期”和“日期时间”都是导入变量,但为什么我对“日期”使用全局声明,而不对“日期时间”变量使用全局声明?

python

-3
推荐指数
1
解决办法
46
查看次数

标签 统计

python ×10

dictionary ×2

defaultdict ×1

jsf ×1

list ×1

python-3.x ×1

set ×1

sorting ×1

utf-8 ×1