我有一个字符串格式的元组:{'biz': ['baz'], 'bar': ['foo']}
。我想手动将其转换为biz=baz&bar=foo
。这就是我试过的
'&'.join(("{}={}".format(key, value[0]) for key, value in s.items()))
但我得到了一个属性错误:
AttributeError: 'ParseResult' object has no attribute 'items'
我怎样才能找到问题的解决方案?
答案 0 :(得分:2)
您可以先将其更改为字典格式:
import ast
evaluated = ast.literal_eval('{'biz': ['baz'], 'bar': ['foo']}')
然后执行:
'&'.join(("{}={}".format(key, value[0]) for key, value in evaluated.items()))
答案 1 :(得分:2)
这是一种直接在字符串上运行的替代解决方案。它有点难看,而且一些正则表达式会让字符串变得更容易。此外,Agata的解决方案更好,因为它利用了你给出的字符串是字典的字面表示这一事实。这意味着如果您将d
粘贴到Python解释器中,那么s.replace(',','&').replace(':','=').replace('[','').replace('{','').replace('}','').replace(']','').replace("'",'').replace(" ",'')
将是一个字典,其键是字符串和值字符串列表。
add_action( 'woocommerce_product_additional_information', 'custom_data_in_product_add_info_tab', 20, 1 );
function custom_data_in_product_add_info_tab( $product ) {
//Product ID - WooCommerce compatibility
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;
// Get your custom fields data
$custom_field1 = get_post_meta( $product_id, '_custom_meta_field1', true );
$custom_field2 = get_post_meta( $product_id, '_custom_meta_field2', true );
// Set your custom fields labels (or names)
$label1 = __( 'Your label 1', 'woocommerce');
$label2 = __( 'Your label 2', 'woocommerce');
// The Output
echo '<h3>'. __('Some title', 'woocommerce') .'</h3>
<table class="custom-fields-data">
<tbody>
<tr class="custom-field1">
<th>'. $label1 .'</th>
<td>'. $custom_field1 .'</td>
</tr>
<tr class="custom-field2">
<th>'. $label2 .'</th>
<td>'. $custom_field2 .'</td>
</tr>
</tbody>
</table>';
}
OP,您应该阅读一些有关基本Python数据结构的教程。
答案 2 :(得分:2)
您也可以使用正则表达式"{}={}&{}={}".format(*re.findall(r"[A-Za-z0-9_-]+", my_string))
。
如果您先json.loads
,请my_string.replace("'",'"')
。
答案 3 :(得分:1)
我想这就是你想要的,虽然我不确定我是否完全理解你的问题。
"&".join(["=".join([k,v[0]]) for k,v in s.items()])